Contract
0x420000000000000000000000000000000000000F
1
Contract Overview
Balance:
0 Ether
EtherValue:
$0.00
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
OVM_GasPriceOracle
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at optimistic.etherscan.io on 2022-01-05 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.9; /** * @title OVM_GasPriceOracle * @dev This contract exposes the current l2 gas price, a measure of how congested the network * currently is. This measure is used by the Sequencer to determine what fee to charge for * transactions. When the system is more congested, the l2 gas price will increase and fees * will also increase as a result. * * All public variables are set while generating the initial L2 state. The * constructor doesn't run in practice as the L2 state generation script uses * the deployed bytecode instead of running the initcode. */ contract OVM_GasPriceOracle is Ownable { /************* * Variables * *************/ // Current L2 gas price uint256 public gasPrice; // Current L1 base fee uint256 public l1BaseFee; // Amortized cost of batch submission per transaction uint256 public overhead; // Value to scale the fee up by uint256 public scalar; // Number of decimals of the scalar uint256 public decimals; /*************** * Constructor * ***************/ /** * @param _owner Address that will initially own this contract. */ constructor(address _owner) Ownable() { transferOwnership(_owner); } /********** * Events * **********/ event GasPriceUpdated(uint256); event L1BaseFeeUpdated(uint256); event OverheadUpdated(uint256); event ScalarUpdated(uint256); event DecimalsUpdated(uint256); /******************** * Public Functions * ********************/ /** * Allows the owner to modify the l2 gas price. * @param _gasPrice New l2 gas price. */ // slither-disable-next-line external-function function setGasPrice(uint256 _gasPrice) public onlyOwner { gasPrice = _gasPrice; emit GasPriceUpdated(_gasPrice); } /** * Allows the owner to modify the l1 base fee. * @param _baseFee New l1 base fee */ // slither-disable-next-line external-function function setL1BaseFee(uint256 _baseFee) public onlyOwner { l1BaseFee = _baseFee; emit L1BaseFeeUpdated(_baseFee); } /** * Allows the owner to modify the overhead. * @param _overhead New overhead */ // slither-disable-next-line external-function function setOverhead(uint256 _overhead) public onlyOwner { overhead = _overhead; emit OverheadUpdated(_overhead); } /** * Allows the owner to modify the scalar. * @param _scalar New scalar */ // slither-disable-next-line external-function function setScalar(uint256 _scalar) public onlyOwner { scalar = _scalar; emit ScalarUpdated(_scalar); } /** * Allows the owner to modify the decimals. * @param _decimals New decimals */ // slither-disable-next-line external-function function setDecimals(uint256 _decimals) public onlyOwner { decimals = _decimals; emit DecimalsUpdated(_decimals); } /** * Computes the L1 portion of the fee * based on the size of the RLP encoded tx * and the current l1BaseFee * @param _data Unsigned RLP encoded tx, 6 elements * @return L1 fee that should be paid for the tx */ // slither-disable-next-line external-function function getL1Fee(bytes memory _data) public view returns (uint256) { uint256 l1GasUsed = getL1GasUsed(_data); uint256 l1Fee = l1GasUsed * l1BaseFee; uint256 divisor = 10**decimals; uint256 unscaled = l1Fee * scalar; uint256 scaled = unscaled / divisor; return scaled; } // solhint-disable max-line-length /** * Computes the amount of L1 gas used for a transaction * The overhead represents the per batch gas overhead of * posting both transaction and state roots to L1 given larger * batch sizes. * 4 gas for 0 byte * https://github.com/ethereum/go-ethereum/blob/9ada4a2e2c415e6b0b51c50e901336872e028872/params/protocol_params.go#L33 * 16 gas for non zero byte * https://github.com/ethereum/go-ethereum/blob/9ada4a2e2c415e6b0b51c50e901336872e028872/params/protocol_params.go#L87 * This will need to be updated if calldata gas prices change * Account for the transaction being unsigned * Padding is added to account for lack of signature on transaction * 1 byte for RLP V prefix * 1 byte for V * 1 byte for RLP R prefix * 32 bytes for R * 1 byte for RLP S prefix * 32 bytes for S * Total: 68 bytes of padding * @param _data Unsigned RLP encoded tx, 6 elements * @return Amount of L1 gas used for a transaction */ // solhint-enable max-line-length function getL1GasUsed(bytes memory _data) public view returns (uint256) { uint256 total = 0; for (uint256 i = 0; i < _data.length; i++) { if (_data[i] == 0) { total += 4; } else { total += 16; } } uint256 unsigned = total + overhead; return unsigned + (68 * 16); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"DecimalsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"GasPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"L1BaseFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"OverheadUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ScalarUpdated","type":"event"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getL1Fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"getL1GasUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l1BaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"overhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scalar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_decimals","type":"uint256"}],"name":"setDecimals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gasPrice","type":"uint256"}],"name":"setGasPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseFee","type":"uint256"}],"name":"setL1BaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_overhead","type":"uint256"}],"name":"setOverhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_scalar","type":"uint256"}],"name":"setScalar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c8885c811610097578063de26c4a111610066578063de26c4a1146101cc578063f2fde38b146101df578063f45e65d8146101f2578063fe173b97146101fb57600080fd5b80638c8885c81461016b5780638da5cb5b1461017e578063bede39b5146101a6578063bf1fe420146101b957600080fd5b806349948e0e116100d357806349948e0e14610134578063519b4bd3146101475780637046559714610150578063715018a61461016357600080fd5b80630c18c162146100fa578063313ce567146101165780633577afc51461011f575b600080fd5b61010360035481565b6040519081526020015b60405180910390f35b61010360055481565b61013261012d3660046108d0565b610204565b005b610103610142366004610918565b6102c6565b61010360025481565b61013261015e3660046108d0565b610322565b6101326103d8565b6101326101793660046108d0565b610465565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010d565b6101326101b43660046108d0565b61051b565b6101326101c73660046108d0565b6105d1565b6101036101da366004610918565b610687565b6101326101ed3660046109e7565b61072b565b61010360045481565b61010360015481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461028a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60038190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6000806102d283610687565b90506000600254826102e49190610a53565b90506000600554600a6102f79190610bb2565b90506000600454836103099190610a53565b905060006103178383610bbe565b979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b60048190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a906020016102bb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b610463600061085b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b60058190556040518181527fd68112a8707e326d08be3656b528c1bcc5bbbfc47f4177e2179b14d8640838c1906020016102bb565b60005473ffffffffffffffffffffffffffffffffffffffff16331461059c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b60028190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c44906020016102bb565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b60018190556040518181527ffcdccc6074c6c42e4bd578aa9870c697dc976a270968452d2b8c8dc369fae396906020016102bb565b600080805b8351811015610704578381815181106106a7576106a7610bf9565b01602001517fff00000000000000000000000000000000000000000000000000000000000000166106e4576106dd600483610c28565b91506106f2565b6106ef601083610c28565b91505b806106fc81610c40565b91505061068c565b506000600354826107159190610c28565b905061072381610440610c28565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610281565b73ffffffffffffffffffffffffffffffffffffffff811661084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610281565b6108588161085b565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108e257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561092a57600080fd5b813567ffffffffffffffff8082111561094257600080fd5b818401915084601f83011261095657600080fd5b813581811115610968576109686108e9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156109ae576109ae6108e9565b816040528281528760208487010111156109c757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156109f957600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610a1d57600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610a8b57610a8b610a24565b500290565b600181815b80851115610ae957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610acf57610acf610a24565b80851615610adc57918102915b93841c9390800290610a95565b509250929050565b600082610b0057506001610bac565b81610b0d57506000610bac565b8160018114610b235760028114610b2d57610b49565b6001915050610bac565b60ff841115610b3e57610b3e610a24565b50506001821b610bac565b5060208310610133831016604e8410600b8410161715610b6c575081810a610bac565b610b768383610a90565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ba857610ba8610a24565b0290505b92915050565b6000610a1d8383610af1565b600082610bf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115610c3b57610c3b610a24565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610c7257610c72610a24565b506001019056fea2646970667358221220f621ba3a2be0d1a6013dd55747de8ced461c9dc210b1ed78e1fadadb047e304064736f6c63430008090033
Deployed ByteCode Sourcemap
3888:4685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4174:23;;;;;;;;;160:25:1;;;148:2;133:18;4174:23:0;;;;;;;;4310;;;;;;5689:138;;;;;;:::i;:::-;;:::i;:::-;;6729:329;;;;;;:::i;:::-;;:::i;4084:24::-;;;;;;5986:126;;;;;;:::i;:::-;;:::i;2467:103::-;;;:::i;6277:138::-;;;;;;:::i;:::-;;:::i;1816:87::-;1862:7;1889:6;1816:87;;1889:6;;;;1701:74:1;;1689:2;1674:18;1816:87:0;1555:226:1;5386:138:0;;;;;;:::i;:::-;;:::i;5078:::-;;;;;;:::i;:::-;;:::i;8183:387::-;;;;;;:::i;:::-;;:::i;2725:201::-;;;;;;:::i;:::-;;:::i;4241:21::-;;;;;;4026:23;;;;;;5689:138;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;;;;;;;;;5757:8:::1;:20:::0;;;5793:26:::1;::::0;160:25:1;;;5793:26:0::1;::::0;148:2:1;133:18;5793:26:0::1;;;;;;;;5689:138:::0;:::o;6729:329::-;6788:7;6808:17;6828:19;6841:5;6828:12;:19::i;:::-;6808:39;;6858:13;6886:9;;6874;:21;;;;:::i;:::-;6858:37;;6906:15;6928:8;;6924:2;:12;;;;:::i;:::-;6906:30;;6947:16;6974:6;;6966:5;:14;;;;:::i;:::-;6947:33;-1:-1:-1;6991:14:0;7008:18;7019:7;6947:33;7008:18;:::i;:::-;6991:35;6729:329;-1:-1:-1;;;;;;;6729:329:0:o;5986:126::-;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;6050:6:::1;:16:::0;;;6082:22:::1;::::0;160:25:1;;;6082:22:0::1;::::0;148:2:1;133:18;6082:22:0::1;14:177:1::0;2467:103:0;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;2532:30:::1;2559:1;2532:18;:30::i;:::-;2467:103::o:0;6277:138::-;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;6345:8:::1;:20:::0;;;6381:26:::1;::::0;160:25:1;;;6381:26:0::1;::::0;148:2:1;133:18;6381:26:0::1;14:177:1::0;5386:138:0;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;5454:9:::1;:20:::0;;;5490:26:::1;::::0;160:25:1;;;5490:26:0::1;::::0;148:2:1;133:18;5490:26:0::1;14:177:1::0;5078:138:0;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;5146:8:::1;:20:::0;;;5182:26:::1;::::0;160:25:1;;;5182:26:0::1;::::0;148:2:1;133:18;5182:26:0::1;14:177:1::0;8183:387:0;8246:7;;;8294:185;8318:5;:12;8314:1;:16;8294:185;;;8356:5;8362:1;8356:8;;;;;;;;:::i;:::-;;;;;;;8352:116;;8390:10;8399:1;8390:10;;:::i;:::-;;;8352:116;;;8441:11;8450:2;8441:11;;:::i;:::-;;;8352:116;8332:3;;;;:::i;:::-;;;;8294:185;;;;8489:16;8516:8;;8508:5;:16;;;;:::i;:::-;8489:35;-1:-1:-1;8542:20:0;8489:35;8554:7;8542:20;:::i;:::-;8535:27;8183:387;-1:-1:-1;;;;8183:387:0:o;2725:201::-;1862:7;1889:6;2036:23;1889:6;736:10;2036:23;2028:68;;;;;;;2302:2:1;2028:68:0;;;2284:21:1;;;2321:18;;;2314:30;2380:34;2360:18;;;2353:62;2432:18;;2028:68:0;2100:356:1;2028:68:0;2814:22:::1;::::0;::::1;2806:73;;;::::0;::::1;::::0;;5380:2:1;2806:73:0::1;::::0;::::1;5362:21:1::0;5419:2;5399:18;;;5392:30;5458:34;5438:18;;;5431:62;5529:8;5509:18;;;5502:36;5555:19;;2806:73:0::1;5178:402:1::0;2806:73:0::1;2890:28;2909:8;2890:18;:28::i;:::-;2725:201:::0;:::o;3086:191::-;3160:16;3179:6;;;3196:17;;;;;;;;;;3229:40;;3179:6;;;;;;;3229:40;;3160:16;3229:40;3149:128;3086:191;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:184::-;433:77;430:1;423:88;530:4;527:1;520:15;554:4;551:1;544:15;570:980;638:6;691:2;679:9;670:7;666:23;662:32;659:52;;;707:1;704;697:12;659:52;747:9;734:23;776:18;817:2;809:6;806:14;803:34;;;833:1;830;823:12;803:34;871:6;860:9;856:22;846:32;;916:7;909:4;905:2;901:13;897:27;887:55;;938:1;935;928:12;887:55;974:2;961:16;996:2;992;989:10;986:36;;;1002:18;;:::i;:::-;1136:2;1130:9;1198:4;1190:13;;1041:66;1186:22;;;1210:2;1182:31;1178:40;1166:53;;;1234:18;;;1254:22;;;1231:46;1228:72;;;1280:18;;:::i;:::-;1320:10;1316:2;1309:22;1355:2;1347:6;1340:18;1395:7;1390:2;1385;1381;1377:11;1373:20;1370:33;1367:53;;;1416:1;1413;1406:12;1367:53;1472:2;1467;1463;1459:11;1454:2;1446:6;1442:15;1429:46;1517:1;1495:15;;;1512:2;1491:24;1484:35;;;;-1:-1:-1;1499:6:1;570:980;-1:-1:-1;;;;;570:980:1:o;1786:309::-;1845:6;1898:2;1886:9;1877:7;1873:23;1869:32;1866:52;;;1914:1;1911;1904:12;1866:52;1953:9;1940:23;2003:42;1996:5;1992:54;1985:5;1982:65;1972:93;;2061:1;2058;2051:12;1972:93;2084:5;1786:309;-1:-1:-1;;;1786:309:1:o;2461:184::-;2513:77;2510:1;2503:88;2610:4;2607:1;2600:15;2634:4;2631:1;2624:15;2650:228;2690:7;2816:1;2748:66;2744:74;2741:1;2738:81;2733:1;2726:9;2719:17;2715:105;2712:131;;;2823:18;;:::i;:::-;-1:-1:-1;2863:9:1;;2650:228::o;2883:482::-;2972:1;3015:5;2972:1;3029:330;3050:7;3040:8;3037:21;3029:330;;;3169:4;3101:66;3097:77;3091:4;3088:87;3085:113;;;3178:18;;:::i;:::-;3228:7;3218:8;3214:22;3211:55;;;3248:16;;;;3211:55;3327:22;;;;3287:15;;;;3029:330;;;3033:3;2883:482;;;;;:::o;3370:866::-;3419:5;3449:8;3439:80;;-1:-1:-1;3490:1:1;3504:5;;3439:80;3538:4;3528:76;;-1:-1:-1;3575:1:1;3589:5;;3528:76;3620:4;3638:1;3633:59;;;;3706:1;3701:130;;;;3613:218;;3633:59;3663:1;3654:10;;3677:5;;;3701:130;3738:3;3728:8;3725:17;3722:43;;;3745:18;;:::i;:::-;-1:-1:-1;;3801:1:1;3787:16;;3816:5;;3613:218;;3915:2;3905:8;3902:16;3896:3;3890:4;3887:13;3883:36;3877:2;3867:8;3864:16;3859:2;3853:4;3850:12;3846:35;3843:77;3840:159;;;-1:-1:-1;3952:19:1;;;3984:5;;3840:159;4031:34;4056:8;4050:4;4031:34;:::i;:::-;4161:6;4093:66;4089:79;4080:7;4077:92;4074:118;;;4172:18;;:::i;:::-;4210:20;;-1:-1:-1;3370:866:1;;;;;:::o;4241:131::-;4301:5;4330:36;4357:8;4351:4;4330:36;:::i;4377:274::-;4417:1;4443;4433:189;;4478:77;4475:1;4468:88;4579:4;4576:1;4569:15;4607:4;4604:1;4597:15;4433:189;-1:-1:-1;4636:9:1;;4377:274::o;4656:184::-;4708:77;4705:1;4698:88;4805:4;4802:1;4795:15;4829:4;4826:1;4819:15;4845:128;4885:3;4916:1;4912:6;4909:1;4906:13;4903:39;;;4922:18;;:::i;:::-;-1:-1:-1;4958:9:1;;4845:128::o;4978:195::-;5017:3;5048:66;5041:5;5038:77;5035:103;;;5118:18;;:::i;:::-;-1:-1:-1;5165:1:1;5154:13;;4978:195::o
Swarm Source
ipfs://f621ba3a2be0d1a6013dd55747de8ced461c9dc210b1ed78e1fadadb047e3040
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.