Contract 0x6d28afd25a1fbc5409b1befff6aefeee2902d89f 3

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xd3f61b11e56a99f6c0d85d5bd64e1f6861361a110d7bed775ec71ef51f646432Execute53119832021-06-04 18:00:46144 days 13 hrs ago0x4e2a43a0bf6480ee8359b7eae244a9fbe9862cdf IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.0000467961
0x84018515bf6c2b845663c936cfb528d6f1c7251f1e75b975da1cce90f304107dSchedule52815342021-06-03 16:38:16145 days 14 hrs ago0x4e2a43a0bf6480ee8359b7eae244a9fbe9862cdf IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.0000529811
0x9b8898d0ec12a69bd74c0298828dbc9480f30ec4f8be070b89592c80360f47f7Schedule52814932021-06-03 16:36:13145 days 14 hrs ago0x4e2a43a0bf6480ee8359b7eae244a9fbe9862cdf IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.0000285911
0x6aa29590603a3464d88cdd42b3e3335699773bfe604cf33671772d5e28e53c82Execute52814552021-06-03 16:34:19145 days 14 hrs ago0x4e2a43a0bf6480ee8359b7eae244a9fbe9862cdf IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.0000419241
0x1e4b7005d713c2f68a7713ece1543f2ae95a751cb3093d5dd873b9fe99168dedRenounce Role52299652021-06-01 21:39:46147 days 9 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.000027721
0x981a4828a4d41f37f445491d7f58555e68aa8757bb399eed31093374e35f32f3Grant Role52299462021-06-01 21:38:49147 days 9 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.000074741
0xb746ce1e72afb3e7615800322d8db96277bc444bea68ab39fb764d4830fe47fbGrant Role52299222021-06-01 21:37:37147 days 9 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.0000259321
0xc9025fdd1844800a03eb45d6492b84f53a20631b5ec86f3883389b277256e421Grant Role52299122021-06-01 21:37:07147 days 9 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.000089741
0x75ed80a783cc3d2dcad28c2483be745a581479838cef06204dfc4bd8e40e975fGrant Role52298762021-06-01 21:35:19147 days 9 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  0x6d28afd25a1fbc5409b1befff6aefeee2902d89f0 HT0.000089741
0xac74eea1b5922ba0a9ecf355dcff77fc01c7ef6392a61f195c402b8099b37ca80x6080604052292052021-06-01 21:01:46147 days 10 hrs ago0x4c0e79d7f3ba9406bab88646b28c596e5d9cea42 IN  Contract Creation0 HT0.0026229721
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimelockController

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-06-01
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/math/SafeMath.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/utils/EnumerableSet.sol


pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


pragma solidity >=0.6.2 <0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/AccessControl.sol


pragma solidity >=0.6.0 <0.8.0;




/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context {
    using EnumerableSet for EnumerableSet.AddressSet;
    using Address for address;

    struct RoleData {
        EnumerableSet.AddressSet members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members.contains(account);
    }

    /**
     * @dev Returns the number of accounts that have `role`. Can be used
     * together with {getRoleMember} to enumerate all bearers of a role.
     */
    function getRoleMemberCount(bytes32 role) public view returns (uint256) {
        return _roles[role].members.length();
    }

    /**
     * @dev Returns one of the accounts that have `role`. `index` must be a
     * value between 0 and {getRoleMemberCount}, non-inclusive.
     *
     * Role bearers are not sorted in any particular way, and their ordering may
     * change at any point.
     *
     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
     * you perform all queries on the same block. See the following
     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
     * for more information.
     */
    function getRoleMember(bytes32 role, uint256 index) public view returns (address) {
        return _roles[role].members.at(index);
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual {
        require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, _roles[role].adminRole, adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (_roles[role].members.add(account)) {
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (_roles[role].members.remove(account)) {
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// File: @openzeppelin/contracts/access/TimelockController.sol


pragma solidity >=0.6.9 <0.8.0;
pragma experimental ABIEncoderV2;



/**
 * @dev Contract module which acts as a timelocked controller. When set as the
 * owner of an `Ownable` smart contract, it enforces a timelock on all
 * `onlyOwner` maintenance operations. This gives time for users of the
 * controlled contract to exit before a potentially dangerous maintenance
 * operation is applied.
 *
 * By default, this contract is self administered, meaning administration tasks
 * have to go through the timelock process. The proposer (resp executor) role
 * is in charge of proposing (resp executing) operations. A common use case is
 * to position this {TimelockController} as the owner of a smart contract, with
 * a multisig or a DAO as the sole proposer.
 *
 * _Available since v3.3._
 */
contract TimelockController is AccessControl {

    bytes32 public constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE");
    bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE");
    bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
    uint256 internal constant _DONE_TIMESTAMP = uint256(1);

    mapping(bytes32 => uint256) private _timestamps;
    uint256 private _minDelay;

    /**
     * @dev Emitted when a call is scheduled as part of operation `id`.
     */
    event CallScheduled(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data, bytes32 predecessor, uint256 delay);

    /**
     * @dev Emitted when a call is performed as part of operation `id`.
     */
    event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);

    /**
     * @dev Emitted when operation `id` is cancelled.
     */
    event Cancelled(bytes32 indexed id);

    /**
     * @dev Emitted when the minimum delay for future operations is modified.
     */
    event MinDelayChange(uint256 oldDuration, uint256 newDuration);

    /**
     * @dev Initializes the contract with a given `minDelay`.
     */
    constructor(uint256 minDelay, address[] memory proposers, address[] memory executors) public {
        _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE);
        _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE);
        _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE);

        // deployer + self administration
        _setupRole(TIMELOCK_ADMIN_ROLE, _msgSender());
        _setupRole(TIMELOCK_ADMIN_ROLE, address(this));

        // register proposers
        for (uint256 i = 0; i < proposers.length; ++i) {
            _setupRole(PROPOSER_ROLE, proposers[i]);
        }

        // register executors
        for (uint256 i = 0; i < executors.length; ++i) {
            _setupRole(EXECUTOR_ROLE, executors[i]);
        }

        _minDelay = minDelay;
        emit MinDelayChange(0, minDelay);
    }

    /**
     * @dev Modifier to make a function callable only by a certain role. In
     * addition to checking the sender's role, `address(0)` 's role is also
     * considered. Granting a role to `address(0)` is equivalent to enabling
     * this role for everyone.
     */
    modifier onlyRole(bytes32 role) {
        require(hasRole(role, _msgSender()) || hasRole(role, address(0)), "TimelockController: sender requires permission");
        _;
    }

    /**
     * @dev Contract might receive/hold ETH as part of the maintenance process.
     */
    receive() external payable {}

    /**
     * @dev Returns whether an id correspond to a registered operation. This
     * includes both Pending, Ready and Done operations.
     */
    function isOperation(bytes32 id) public view virtual returns (bool pending) {
        return getTimestamp(id) > 0;
    }

    /**
     * @dev Returns whether an operation is pending or not.
     */
    function isOperationPending(bytes32 id) public view virtual returns (bool pending) {
        return getTimestamp(id) > _DONE_TIMESTAMP;
    }

    /**
     * @dev Returns whether an operation is ready or not.
     */
    function isOperationReady(bytes32 id) public view virtual returns (bool ready) {
        uint256 timestamp = getTimestamp(id);
        // solhint-disable-next-line not-rely-on-time
        return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp;
    }

    /**
     * @dev Returns whether an operation is done or not.
     */
    function isOperationDone(bytes32 id) public view virtual returns (bool done) {
        return getTimestamp(id) == _DONE_TIMESTAMP;
    }

    /**
     * @dev Returns the timestamp at with an operation becomes ready (0 for
     * unset operations, 1 for done operations).
     */
    function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) {
        return _timestamps[id];
    }

    /**
     * @dev Returns the minimum delay for an operation to become valid.
     *
     * This value can be changed by executing an operation that calls `updateDelay`.
     */
    function getMinDelay() public view virtual returns (uint256 duration) {
        return _minDelay;
    }

    /**
     * @dev Returns the identifier of an operation containing a single
     * transaction.
     */
    function hashOperation(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt) public pure virtual returns (bytes32 hash) {
        return keccak256(abi.encode(target, value, data, predecessor, salt));
    }

    /**
     * @dev Returns the identifier of an operation containing a batch of
     * transactions.
     */
    function hashOperationBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt) public pure virtual returns (bytes32 hash) {
        return keccak256(abi.encode(targets, values, datas, predecessor, salt));
    }

    /**
     * @dev Schedule an operation containing a single transaction.
     *
     * Emits a {CallScheduled} event.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function schedule(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt, uint256 delay) public virtual onlyRole(PROPOSER_ROLE) {
        bytes32 id = hashOperation(target, value, data, predecessor, salt);
        _schedule(id, delay);
        emit CallScheduled(id, 0, target, value, data, predecessor, delay);
    }

    /**
     * @dev Schedule an operation containing a batch of transactions.
     *
     * Emits one {CallScheduled} event per transaction in the batch.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function scheduleBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt, uint256 delay) public virtual onlyRole(PROPOSER_ROLE) {
        require(targets.length == values.length, "TimelockController: length mismatch");
        require(targets.length == datas.length, "TimelockController: length mismatch");

        bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
        _schedule(id, delay);
        for (uint256 i = 0; i < targets.length; ++i) {
            emit CallScheduled(id, i, targets[i], values[i], datas[i], predecessor, delay);
        }
    }

    /**
     * @dev Schedule an operation that is to becomes valid after a given delay.
     */
    function _schedule(bytes32 id, uint256 delay) private {
        require(!isOperation(id), "TimelockController: operation already scheduled");
        require(delay >= getMinDelay(), "TimelockController: insufficient delay");
        // solhint-disable-next-line not-rely-on-time
        _timestamps[id] = SafeMath.add(block.timestamp, delay);
    }

    /**
     * @dev Cancel an operation.
     *
     * Requirements:
     *
     * - the caller must have the 'proposer' role.
     */
    function cancel(bytes32 id) public virtual onlyRole(PROPOSER_ROLE) {
        require(isOperationPending(id), "TimelockController: operation cannot be cancelled");
        delete _timestamps[id];

        emit Cancelled(id);
    }

    /**
     * @dev Execute an (ready) operation containing a single transaction.
     *
     * Emits a {CallExecuted} event.
     *
     * Requirements:
     *
     * - the caller must have the 'executor' role.
     */
    function execute(address target, uint256 value, bytes calldata data, bytes32 predecessor, bytes32 salt) public payable virtual onlyRole(EXECUTOR_ROLE) {
        bytes32 id = hashOperation(target, value, data, predecessor, salt);
        _beforeCall(predecessor);
        _call(id, 0, target, value, data);
        _afterCall(id);
    }

    /**
     * @dev Execute an (ready) operation containing a batch of transactions.
     *
     * Emits one {CallExecuted} event per transaction in the batch.
     *
     * Requirements:
     *
     * - the caller must have the 'executor' role.
     */
    function executeBatch(address[] calldata targets, uint256[] calldata values, bytes[] calldata datas, bytes32 predecessor, bytes32 salt) public payable virtual onlyRole(EXECUTOR_ROLE) {
        require(targets.length == values.length, "TimelockController: length mismatch");
        require(targets.length == datas.length, "TimelockController: length mismatch");

        bytes32 id = hashOperationBatch(targets, values, datas, predecessor, salt);
        _beforeCall(predecessor);
        for (uint256 i = 0; i < targets.length; ++i) {
            _call(id, i, targets[i], values[i], datas[i]);
        }
        _afterCall(id);
    }

    /**
     * @dev Checks before execution of an operation's calls.
     */
    function _beforeCall(bytes32 predecessor) private view {
        require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency");
    }

    /**
     * @dev Checks after execution of an operation's calls.
     */
    function _afterCall(bytes32 id) private {
        require(isOperationReady(id), "TimelockController: operation is not ready");
        _timestamps[id] = _DONE_TIMESTAMP;
    }

    /**
     * @dev Execute an operation's call.
     *
     * Emits a {CallExecuted} event.
     */
    function _call(bytes32 id, uint256 index, address target, uint256 value, bytes calldata data) private {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success,) = target.call{value: value}(data);
        require(success, "TimelockController: underlying transaction reverted");

        emit CallExecuted(id, index, target, value, data);
    }

    /**
     * @dev Changes the minimum timelock duration for future operations.
     *
     * Emits a {MinDelayChange} event.
     *
     * Requirements:
     *
     * - the caller must be the timelock itself. This can only be achieved by scheduling and later executing
     * an operation where the timelock is the target and the data is the ABI-encoded call to this function.
     */
    function updateDelay(uint256 newDelay) external virtual {
        require(msg.sender == address(this), "TimelockController: caller must be timelock");
        emit MinDelayChange(_minDelay, newDelay);
        _minDelay = newDelay;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"minDelay","type":"uint256"},{"internalType":"address[]","name":"proposers","type":"address[]"},{"internalType":"address[]","name":"executors","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CallExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"CallScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"MinDelayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"datas","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"executeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinDelay","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperation","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"datas","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperationBatch","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"done","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"ready","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"datas","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"scheduleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200318a3803806200318a83398181016040528101906200003791906200053f565b620000697f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5806200028c60201b60201c565b620000bb7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc17f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca56200028c60201b60201c565b6200010d7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e637f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca56200028c60201b60201c565b6200014e7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca562000142620002ee60201b60201c565b620002f660201b60201c565b620001807f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca530620002f660201b60201c565b60005b8251811015620001df57620001d37fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1848381518110620001bf57fe5b6020026020010151620002f660201b60201c565b80600101905062000183565b5060005b81518110156200023f57620002337fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638383815181106200021f57fe5b6020026020010151620002f660201b60201c565b806001019050620001e3565b50826002819055507f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d56000846040516200027b929190620005e9565b60405180910390a1505050620006f3565b8060008084815260200190815260200160002060020154837fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a480600080848152602001908152602001600020600201819055505050565b600033905090565b6200030882826200030c60201b60201c565b5050565b6200033a81600080858152602001908152602001600020600001620003af60201b620010ed1790919060201c565b15620003ab5762000350620002ee60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003df836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620003e760201b60201c565b905092915050565b6000620003fb83836200046160201b60201c565b620004565782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200045b565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000815190506200049581620006bf565b92915050565b600082601f830112620004ad57600080fd5b8151620004c4620004be8262000644565b62000616565b91508181835260208401935060208101905083856020840282011115620004ea57600080fd5b60005b838110156200051e578162000503888262000484565b845260208401935060208301925050600181019050620004ed565b5050505092915050565b6000815190506200053981620006d9565b92915050565b6000806000606084860312156200055557600080fd5b6000620005658682870162000528565b935050602084015167ffffffffffffffff8111156200058357600080fd5b62000591868287016200049b565b925050604084015167ffffffffffffffff811115620005af57600080fd5b620005bd868287016200049b565b9150509250925092565b620005d281620006ab565b82525050565b620005e381620006a1565b82525050565b6000604082019050620006006000830185620005c7565b6200060f6020830184620005d8565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156200063a57600080fd5b8060405250919050565b600067ffffffffffffffff8211156200065c57600080fd5b602082029050602081019050919050565b60006200067a8262000681565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620006b882620006a1565b9050919050565b620006ca816200066d565b8114620006d657600080fd5b50565b620006e481620006a1565b8114620006f057600080fd5b50565b612a8780620007036000396000f3fe60806040526004361061016a5760003560e01c80638065657f116100d1578063b1c5f4271161008a578063d45c443511610064578063d45c443514610596578063d547741f146105d3578063e38335e5146105fc578063f27a0c921461061857610171565b8063b1c5f427146104f3578063c4d252f514610530578063ca15c8731461055957610171565b80638065657f146103bd5780638f2a0bb0146103fa5780638f61f4f5146104235780639010d07c1461044e57806391d148541461048b578063a217fddf146104c857610171565b80632ab0f529116101235780632ab0f5291461028b5780632f2ff15d146102c857806331d50750146102f157806336568abe1461032e578063584b153e1461035757806364d623531461039457610171565b806301d5062a1461017657806307bd02651461019f5780630d3cf6fc146101ca578063134008d3146101f557806313bc9f2014610211578063248a9ca31461024e57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d600480360381019061019891906119b5565b610643565b005b3480156101ab57600080fd5b506101b4610731565b6040516101c19190612617565b60405180910390f35b3480156101d657600080fd5b506101df610755565b6040516101ec9190612617565b60405180910390f35b61020f600480360381019061020a9190611923565b610779565b005b34801561021d57600080fd5b5061023860048036038101906102339190611c07565b610839565b60405161024591906125fc565b60405180910390f35b34801561025a57600080fd5b5061027560048036038101906102709190611c07565b61085f565b6040516102829190612617565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190611c07565b61087e565b6040516102bf91906125fc565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190611c30565b610893565b005b3480156102fd57600080fd5b5061031860048036038101906103139190611c07565b610906565b60405161032591906125fc565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190611c30565b61091a565b005b34801561036357600080fd5b5061037e60048036038101906103799190611c07565b61099d565b60405161038b91906125fc565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190611ca8565b6109b2565b005b3480156103c957600080fd5b506103e460048036038101906103df9190611923565b610a65565b6040516103f19190612617565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190611b28565b610aa4565b005b34801561042f57600080fd5b50610438610c8d565b6040516104459190612617565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190611c6c565b610cb1565b604051610482919061247b565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190611c30565b610ce2565b6040516104bf91906125fc565b60405180910390f35b3480156104d457600080fd5b506104dd610d13565b6040516104ea9190612617565b60405180910390f35b3480156104ff57600080fd5b5061051a60048036038101906105159190611a5c565b610d1a565b6040516105279190612617565b60405180910390f35b34801561053c57600080fd5b5061055760048036038101906105529190611c07565b610d5f565b005b34801561056557600080fd5b50610580600480360381019061057b9190611c07565b610e72565b60405161058d91906127f2565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190611c07565b610e98565b6040516105ca91906127f2565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190611c30565b610eb5565b005b61061660048036038101906106119190611a5c565b610f28565b005b34801561062457600080fd5b5061062d6110e3565b60405161063a91906127f2565b60405180910390f35b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc16106758161067061111d565b610ce2565b806106875750610686816000610ce2565b5b6106c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bd906126b2565b60405180910390fd5b60006106d6898989898989610a65565b90506106e28184611125565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161071e96959493929190612532565b60405180910390a3505050505050505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b7f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636107ab816107a661111d565b610ce2565b806107bd57506107bc816000610ce2565b5b6107fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f3906126b2565b60405180910390fd5b600061080c888888888888610a65565b9050610817846111dd565b6108268160008a8a8a8a611235565b61082f8161132d565b5050505050505050565b60008061084583610e98565b90506001811180156108575750428111155b915050919050565b6000806000838152602001908152602001600020600201549050919050565b6000600161088b83610e98565b149050919050565b6108b9600080848152602001908152602001600020600201546108b461111d565b610ce2565b6108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef90612672565b60405180910390fd5b6109028282611390565b5050565b60008061091283610e98565b119050919050565b61092261111d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461098f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610986906127b2565b60405180910390fd5b6109998282611423565b5050565b600060016109aa83610e98565b119050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790612792565b60405180910390fd5b7f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560025482604051610a5392919061280d565b60405180910390a18060028190555050565b6000868686868686604051602001610a82969594939291906124d6565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610ad681610ad161111d565b610ce2565b80610ae85750610ae7816000610ce2565b5b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e906126b2565b60405180910390fd5b878790508a8a905014610b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6690612692565b60405180910390fd5b858590508a8a905014610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90612692565b60405180910390fd5b6000610bc98b8b8b8b8b8b8b8b610d1a565b9050610bd58184611125565b60005b8b8b9050811015610c7f5780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610c1257fe5b9050602002016020810190610c2791906118fa565b8d8d86818110610c3357fe5b905060200201358c8c87818110610c4657fe5b9050602002810190610c589190612836565b8c8b604051610c6c96959493929190612532565b60405180910390a3806001019050610bd8565b505050505050505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b6000610cda826000808681526020019081526020016000206000016114b690919063ffffffff16565b905092915050565b6000610d0b826000808681526020019081526020016000206000016114d090919063ffffffff16565b905092915050565b6000801b81565b60008888888888888888604051602001610d3b98979695949392919061258e565b60405160208183030381529060405280519060200120905098975050505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610d9181610d8c61111d565b610ce2565b80610da35750610da2816000610ce2565b5b610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd9906126b2565b60405180910390fd5b610deb8261099d565b610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2190612772565b60405180910390fd5b6001600083815260200190815260200160002060009055817fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7060405160405180910390a25050565b6000610e91600080848152602001908152602001600020600001611500565b9050919050565b600060016000838152602001908152602001600020549050919050565b610edb60008084815260200190815260200160002060020154610ed661111d565b610ce2565b610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f11906126f2565b60405180910390fd5b610f248282611423565b5050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610f5a81610f5561111d565b610ce2565b80610f6c5750610f6b816000610ce2565b5b610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906126b2565b60405180910390fd5b868690508989905014610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90612692565b60405180910390fd5b84849050898990501461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290612692565b60405180910390fd5b600061104d8a8a8a8a8a8a8a8a610d1a565b9050611058846111dd565b60005b8a8a90508110156110cd576110c282828d8d8581811061107757fe5b905060200201602081019061108c91906118fa565b8c8c8681811061109857fe5b905060200201358b8b878181106110ab57fe5b90506020028101906110bd9190612836565b611235565b80600101905061105b565b506110d78161132d565b50505050505050505050565b6000600254905090565b6000611115836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611515565b905092915050565b600033905090565b61112e82610906565b1561116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590612732565b60405180910390fd5b6111766110e3565b8110156111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af90612712565b60405180910390fd5b6111c24282611585565b60016000848152602001908152602001600020819055505050565b6000801b8114806111f357506111f28161087e565b5b611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990612652565b60405180910390fd5b50565b60008473ffffffffffffffffffffffffffffffffffffffff1684848460405161125f929190612462565b60006040518083038185875af1925050503d806000811461129c576040519150601f19603f3d011682016040523d82523d6000602084013e6112a1565b606091505b50509050806112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc906127d2565b60405180910390fd5b85877fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588787878760405161131c9493929190612496565b60405180910390a350505050505050565b61133681610839565b611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90612752565b60405180910390fd5b60018060008381526020019081526020016000208190555050565b6113b7816000808581526020019081526020016000206000016110ed90919063ffffffff16565b1561141f576113c461111d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61144a816000808581526020019081526020016000206000016115da90919063ffffffff16565b156114b25761145761111d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60006114c5836000018361160a565b60001c905092915050565b60006114f8836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611677565b905092915050565b600061150e8260000161169a565b9050919050565b60006115218383611677565b61157a57826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061157f565b600090505b92915050565b6000808284019050838110156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c7906126d2565b60405180910390fd5b8091505092915050565b6000611602836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6116ab565b905092915050565b600081836000018054905011611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90612632565b60405180910390fd5b82600001828154811061166457fe5b9060005260206000200154905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b600081600001805490509050919050565b6000808360010160008481526020019081526020016000205490506000811461178757600060018203905060006001866000018054905003905060008660000182815481106116f657fe5b906000526020600020015490508087600001848154811061171357fe5b906000526020600020018190555060018301876001016000838152602001908152602001600020819055508660000180548061174b57fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061178d565b60009150505b92915050565b6000813590506117a281612a0c565b92915050565b60008083601f8401126117ba57600080fd5b8235905067ffffffffffffffff8111156117d357600080fd5b6020830191508360208202830111156117eb57600080fd5b9250929050565b60008083601f84011261180457600080fd5b8235905067ffffffffffffffff81111561181d57600080fd5b60208301915083602082028301111561183557600080fd5b9250929050565b60008083601f84011261184e57600080fd5b8235905067ffffffffffffffff81111561186757600080fd5b60208301915083602082028301111561187f57600080fd5b9250929050565b60008135905061189581612a23565b92915050565b60008083601f8401126118ad57600080fd5b8235905067ffffffffffffffff8111156118c657600080fd5b6020830191508360018202830111156118de57600080fd5b9250929050565b6000813590506118f481612a3a565b92915050565b60006020828403121561190c57600080fd5b600061191a84828501611793565b91505092915050565b60008060008060008060a0878903121561193c57600080fd5b600061194a89828a01611793565b965050602061195b89828a016118e5565b955050604087013567ffffffffffffffff81111561197857600080fd5b61198489828a0161189b565b9450945050606061199789828a01611886565b92505060806119a889828a01611886565b9150509295509295509295565b600080600080600080600060c0888a0312156119d057600080fd5b60006119de8a828b01611793565b97505060206119ef8a828b016118e5565b965050604088013567ffffffffffffffff811115611a0c57600080fd5b611a188a828b0161189b565b95509550506060611a2b8a828b01611886565b9350506080611a3c8a828b01611886565b92505060a0611a4d8a828b016118e5565b91505092959891949750929550565b60008060008060008060008060a0898b031215611a7857600080fd5b600089013567ffffffffffffffff811115611a9257600080fd5b611a9e8b828c016117a8565b9850985050602089013567ffffffffffffffff811115611abd57600080fd5b611ac98b828c0161183c565b9650965050604089013567ffffffffffffffff811115611ae857600080fd5b611af48b828c016117f2565b94509450506060611b078b828c01611886565b9250506080611b188b828c01611886565b9150509295985092959890939650565b600080600080600080600080600060c08a8c031215611b4657600080fd5b60008a013567ffffffffffffffff811115611b6057600080fd5b611b6c8c828d016117a8565b995099505060208a013567ffffffffffffffff811115611b8b57600080fd5b611b978c828d0161183c565b975097505060408a013567ffffffffffffffff811115611bb657600080fd5b611bc28c828d016117f2565b95509550506060611bd58c828d01611886565b9350506080611be68c828d01611886565b92505060a0611bf78c828d016118e5565b9150509295985092959850929598565b600060208284031215611c1957600080fd5b6000611c2784828501611886565b91505092915050565b60008060408385031215611c4357600080fd5b6000611c5185828601611886565b9250506020611c6285828601611793565b9150509250929050565b60008060408385031215611c7f57600080fd5b6000611c8d85828601611886565b9250506020611c9e858286016118e5565b9150509250929050565b600060208284031215611cba57600080fd5b6000611cc8848285016118e5565b91505092915050565b6000611cdd8383611cff565b60208301905092915050565b6000611cf6848484611e66565b90509392505050565b611d088161299a565b82525050565b611d178161299a565b82525050565b6000611d2983856128bb565b9350611d348261288d565b8060005b85811015611d6d57611d4a828461292c565b611d548882611cd1565b9750611d5f836128a1565b925050600181019050611d38565b5085925050509392505050565b6000611d8683856128cc565b935083602084028501611d9884612897565b8060005b87811015611dde578484038952611db38284612943565b611dbe868284611ce9565b9550611dc9846128ae565b935060208b019a505050600181019050611d9c565b50829750879450505050509392505050565b6000611dfc83856128dd565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611e2b57600080fd5b602083029250611e3c8385846129ec565b82840190509392505050565b611e51816129ac565b82525050565b611e60816129b8565b82525050565b6000611e7283856128ee565b9350611e7f8385846129ec565b611e88836129fb565b840190509392505050565b6000611e9f83856128ff565b9350611eac8385846129ec565b611eb5836129fb565b840190509392505050565b6000611ecc8385612910565b9350611ed98385846129ec565b82840190509392505050565b6000611ef260228361291b565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611f5860268361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e67206465706560008301527f6e64656e637900000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000611fbe602f8361291b565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f206772616e7400000000000000000000000000000000006020830152604082019050919050565b600061202460238361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d6160008301527f74636800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061208a602e8361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a2073656e64657220726571756960008301527f726573207065726d697373696f6e0000000000000000000000000000000000006020830152604082019050919050565b60006120f0601b8361291b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061213060308361291b565b91507f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008301527f2061646d696e20746f207265766f6b65000000000000000000000000000000006020830152604082019050919050565b600061219660268361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e7460008301527f2064656c617900000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006121fc602f8361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60008301527f7265616479207363686564756c656400000000000000000000000000000000006020830152604082019050919050565b6000612262602a8361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20697360008301527f206e6f74207265616479000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c860318361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20636160008301527f6e6e6f742062652063616e63656c6c65640000000000000000000000000000006020830152604082019050919050565b600061232e602b8361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060008301527f62652074696d656c6f636b0000000000000000000000000000000000000000006020830152604082019050919050565b6000612394602f8361291b565b91507f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008301527f20726f6c657320666f722073656c6600000000000000000000000000000000006020830152604082019050919050565b60006123fa60338361291b565b91507f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e67207460008301527f72616e73616374696f6e207265766572746564000000000000000000000000006020830152604082019050919050565b61245c816129e2565b82525050565b600061246f828486611ec0565b91508190509392505050565b60006020820190506124906000830184611d0e565b92915050565b60006060820190506124ab6000830187611d0e565b6124b86020830186612453565b81810360408301526124cb818486611e93565b905095945050505050565b600060a0820190506124eb6000830189611d0e565b6124f86020830188612453565b818103604083015261250b818688611e93565b905061251a6060830185611e57565b6125276080830184611e57565b979650505050505050565b600060a0820190506125476000830189611d0e565b6125546020830188612453565b8181036040830152612567818688611e93565b90506125766060830185611e57565b6125836080830184612453565b979650505050505050565b600060a08201905081810360008301526125a9818a8c611d1d565b905081810360208301526125be81888a611df0565b905081810360408301526125d3818688611d7a565b90506125e26060830185611e57565b6125ef6080830184611e57565b9998505050505050505050565b60006020820190506126116000830184611e48565b92915050565b600060208201905061262c6000830184611e57565b92915050565b6000602082019050818103600083015261264b81611ee5565b9050919050565b6000602082019050818103600083015261266b81611f4b565b9050919050565b6000602082019050818103600083015261268b81611fb1565b9050919050565b600060208201905081810360008301526126ab81612017565b9050919050565b600060208201905081810360008301526126cb8161207d565b9050919050565b600060208201905081810360008301526126eb816120e3565b9050919050565b6000602082019050818103600083015261270b81612123565b9050919050565b6000602082019050818103600083015261272b81612189565b9050919050565b6000602082019050818103600083015261274b816121ef565b9050919050565b6000602082019050818103600083015261276b81612255565b9050919050565b6000602082019050818103600083015261278b816122bb565b9050919050565b600060208201905081810360008301526127ab81612321565b9050919050565b600060208201905081810360008301526127cb81612387565b9050919050565b600060208201905081810360008301526127eb816123ed565b9050919050565b60006020820190506128076000830184612453565b92915050565b60006040820190506128226000830185612453565b61282f6020830184612453565b9392505050565b6000808335600160200384360303811261284f57600080fd5b80840192508235915067ffffffffffffffff82111561286d57600080fd5b60208301925060018202360383131561288557600080fd5b509250929050565b6000819050919050565b6000819050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600061293b6020840184611793565b905092915050565b6000808335600160200384360303811261295c57600080fd5b83810192508235915060208301925067ffffffffffffffff82111561298057600080fd5b60018202360384131561299257600080fd5b509250929050565b60006129a5826129c2565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b612a158161299a565b8114612a2057600080fd5b50565b612a2c816129b8565b8114612a3757600080fd5b50565b612a43816129e2565b8114612a4e57600080fd5b5056fea26469706673582212200aa1981c3ff8d8bbfacd3629002a2f0aeb5d84fcf31680e461d30da9f668f06964736f6c634300060c003300000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : minDelay (uint256): 86400

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

34664:10612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39996:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34876:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34718:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42350:340;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37947:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30560:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38297:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30936:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37510:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32145:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37719:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45033:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40613:656;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34803:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30233:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29194:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27939:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39490:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41879:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29507:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38588:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31408:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42961:644;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38904:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39996:352;34843:26;37085:27;37093:4;37099:12;:10;:12::i;:::-;37085:7;:27::i;:::-;:56;;;;37116:25;37124:4;37138:1;37116:7;:25::i;:::-;37085:56;37077:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;40166:10:::1;40179:53;40193:6;40201:5;40208:4;;40214:11;40227:4;40179:13;:53::i;:::-;40166:66;;40243:20;40253:2;40257:5;40243:9;:20::i;:::-;40297:1;40293:2;40279:61;40300:6;40308:5;40315:4;;40321:11;40334:5;40279:61;;;;;;;;;;;:::i;:::-;;;;;;;;37203:1;39996:352:::0;;;;;;;;:::o;34876:66::-;34916:26;34876:66;:::o;34718:78::-;34764:32;34718:78;:::o;42350:340::-;34916:26;37085:27;37093:4;37099:12;:10;:12::i;:::-;37085:7;:27::i;:::-;:56;;;;37116:25;37124:4;37138:1;37116:7;:25::i;:::-;37085:56;37077:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;42512:10:::1;42525:53;42539:6;42547:5;42554:4;;42560:11;42573:4;42525:13;:53::i;:::-;42512:66;;42589:24;42601:11;42589;:24::i;:::-;42624:33;42630:2;42634:1;42637:6;42645:5;42652:4;;42624:5;:33::i;:::-;42668:14;42679:2;42668:10;:14::i;:::-;37203:1;42350:340:::0;;;;;;;:::o;37947:266::-;38014:10;38037:17;38057:16;38070:2;38057:12;:16::i;:::-;38037:36;;35001:1;38146:9;:27;:59;;;;;38190:15;38177:9;:28;;38146:59;38139:66;;;37947:266;;;:::o;30560:114::-;30617:7;30644:6;:12;30651:4;30644:12;;;;;;;;;;;:22;;;30637:29;;30560:114;;;:::o;38297:138::-;38363:9;35001:1;38392:16;38405:2;38392:12;:16::i;:::-;:35;38385:42;;38297:138;;;:::o;30936:227::-;31020:45;31028:6;:12;31035:4;31028:12;;;;;;;;;;;:22;;;31052:12;:10;:12::i;:::-;31020:7;:45::i;:::-;31012:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;31130:25;31141:4;31147:7;31130:10;:25::i;:::-;30936:227;;:::o;37510:122::-;37572:12;37623:1;37604:16;37617:2;37604:12;:16::i;:::-;:20;37597:27;;37510:122;;;:::o;32145:209::-;32243:12;:10;:12::i;:::-;32232:23;;:7;:23;;;32224:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;32320:26;32332:4;32338:7;32320:11;:26::i;:::-;32145:209;;:::o;37719:143::-;37788:12;35001:1;37820:16;37833:2;37820:12;:16::i;:::-;:34;37813:41;;37719:143;;;:::o;45033:240::-;45130:4;45108:27;;:10;:27;;;45100:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;45199:35;45214:9;;45225:8;45199:35;;;;;;;:::i;:::-;;;;;;;;45257:8;45245:9;:20;;;;45033:240;:::o;39128:::-;39267:12;39320:6;39328:5;39335:4;;39341:11;39354:4;39309:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39299:61;;;;;;39292:68;;39128:240;;;;;;;;:::o;40613:656::-;34843:26;37085:27;37093:4;37099:12;:10;:12::i;:::-;37085:7;:27::i;:::-;:56;;;;37116:25;37124:4;37138:1;37116:7;:25::i;:::-;37085:56;37077:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;40841:6:::1;;:13;;40823:7;;:14;;:31;40815:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;40931:5;;:12;;40913:7;;:14;;:30;40905:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;40996:10;41009:61;41028:7;;41037:6;;41045:5;;41052:11;41065:4;41009:18;:61::i;:::-;40996:74;;41081:20;41091:2;41095:5;41081:9;:20::i;:::-;41117:9;41112:150;41136:7;;:14;;41132:1;:18;41112:150;;;41195:1;41191:2;41177:73;41198:7;;41206:1;41198:10;;;;;;;;;;;;;;;;;;;;:::i;:::-;41210:6;;41217:1;41210:9;;;;;;;;;;;;;41221:5;;41227:1;41221:8;;;;;;;;;;;;;;;;;;:::i;:::-;41231:11;41244:5;41177:73;;;;;;;;;;;:::i;:::-;;;;;;;;41152:3;;;;;41112:150;;;;37203:1;40613:656:::0;;;;;;;;;;:::o;34803:66::-;34843:26;34803:66;:::o;30233:138::-;30306:7;30333:30;30357:5;30333:6;:12;30340:4;30333:12;;;;;;;;;;;:20;;:23;;:30;;;;:::i;:::-;30326:37;;30233:138;;;;:::o;29194:139::-;29263:4;29287:38;29317:7;29287:6;:12;29294:4;29287:12;;;;;;;;;;;:20;;:29;;:38;;;;:::i;:::-;29280:45;;29194:139;;;;:::o;27939:49::-;27984:4;27939:49;;;:::o;39490:275::-;39661:12;39714:7;;39723:6;;39731:5;;39738:11;39751:4;39703:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39693:64;;;;;;39686:71;;39490:275;;;;;;;;;;:::o;41879:234::-;34843:26;37085:27;37093:4;37099:12;:10;:12::i;:::-;37085:7;:27::i;:::-;:56;;;;37116:25;37124:4;37138:1;37116:7;:25::i;:::-;37085:56;37077:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;41965:22:::1;41984:2;41965:18;:22::i;:::-;41957:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;42059:11;:15;42071:2;42059:15;;;;;;;;;;;42052:22;;;42102:2;42092:13;;;;;;;;;;41879:234:::0;;:::o;29507:127::-;29570:7;29597:29;:6;:12;29604:4;29597:12;;;;;;;;;;;:20;;:27;:29::i;:::-;29590:36;;29507:127;;;:::o;38588:123::-;38651:17;38688:11;:15;38700:2;38688:15;;;;;;;;;;;;38681:22;;38588:123;;;:::o;31408:230::-;31493:45;31501:6;:12;31508:4;31501:12;;;;;;;;;;;:22;;;31525:12;:10;:12::i;:::-;31493:7;:45::i;:::-;31485:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;31604:26;31616:4;31622:7;31604:11;:26::i;:::-;31408:230;;:::o;42961:644::-;34916:26;37085:27;37093:4;37099:12;:10;:12::i;:::-;37085:7;:27::i;:::-;:56;;;;37116:25;37124:4;37138:1;37116:7;:25::i;:::-;37085:56;37077:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;43181:6:::1;;:13;;43163:7;;:14;;:31;43155:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;43271:5;;:12;;43253:7;;:14;;:30;43245:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;43336:10;43349:61;43368:7;;43377:6;;43385:5;;43392:11;43405:4;43349:18;:61::i;:::-;43336:74;;43421:24;43433:11;43421;:24::i;:::-;43461:9;43456:117;43480:7;;:14;;43476:1;:18;43456:117;;;43516:45;43522:2;43526:1;43529:7;;43537:1;43529:10;;;;;;;;;;;;;;;;;;;;:::i;:::-;43541:6;;43548:1;43541:9;;;;;;;;;;;;;43552:5;;43558:1;43552:8;;;;;;;;;;;;;;;;;;:::i;:::-;43516:5;:45::i;:::-;43496:3;;;;;43456:117;;;;43583:14;43594:2;43583:10;:14::i;:::-;37203:1;42961:644:::0;;;;;;;;;:::o;38904:105::-;38956:16;38992:9;;38985:16;;38904:105;:::o;14151:152::-;14221:4;14245:50;14250:3;:10;;14286:5;14270:23;;14262:32;;14245:4;:50::i;:::-;14238:57;;14151:152;;;;:::o;25874:106::-;25927:15;25962:10;25955:17;;25874:106;:::o;41376:353::-;41450:15;41462:2;41450:11;:15::i;:::-;41449:16;41441:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41545:13;:11;:13::i;:::-;41536:5;:22;;41528:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41685:36;41698:15;41715:5;41685:12;:36::i;:::-;41667:11;:15;41679:2;41667:15;;;;;;;;;;;:54;;;;41376:353;;:::o;43693:182::-;43790:1;43782:10;;43767:11;:25;:57;;;;43796:28;43812:11;43796:15;:28::i;:::-;43767:57;43759:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;43693:182;:::o;44254:374::-;44428:12;44445:6;:11;;44464:5;44471:4;;44445:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44427:49;;;44495:7;44487:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44593:5;44589:2;44576:44;44600:6;44608:5;44615:4;;44576:44;;;;;;;;;:::i;:::-;;;;;;;;44254:374;;;;;;;:::o;43962:178::-;44021:20;44038:2;44021:16;:20::i;:::-;44013:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35001:1;44099:11;:15;44111:2;44099:15;;;;;;;;;;;:33;;;;43962:178;:::o;33388:188::-;33462:33;33487:7;33462:6;:12;33469:4;33462:12;;;;;;;;;;;:20;;:24;;:33;;;;:::i;:::-;33458:111;;;33544:12;:10;:12::i;:::-;33517:40;;33535:7;33517:40;;33529:4;33517:40;;;;;;;;;;33458:111;33388:188;;:::o;33584:192::-;33659:36;33687:7;33659:6;:12;33666:4;33659:12;;;;;;;;;;;:20;;:27;;:36;;;;:::i;:::-;33655:114;;;33744:12;:10;:12::i;:::-;33717:40;;33735:7;33717:40;;33729:4;33717:40;;;;;;;;;;33655:114;33584:192;;:::o;15437:158::-;15511:7;15562:22;15566:3;:10;;15578:5;15562:3;:22::i;:::-;15554:31;;15531:56;;15437:158;;;;:::o;14723:167::-;14803:4;14827:55;14837:3;:10;;14873:5;14857:23;;14849:32;;14827:9;:55::i;:::-;14820:62;;14723:167;;;;:::o;14976:117::-;15039:7;15066:19;15074:3;:10;;15066:7;:19::i;:::-;15059:26;;14976:117;;;:::o;9215:414::-;9278:4;9300:21;9310:3;9315:5;9300:9;:21::i;:::-;9295:327;;9338:3;:11;;9355:5;9338:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:3;:11;;:18;;;;9499:3;:12;;:19;9512:5;9499:19;;;;;;;;;;;:40;;;;9561:4;9554:11;;;;9295:327;9605:5;9598:12;;9215:414;;;;;:::o;2828:179::-;2886:7;2906:9;2922:1;2918;:5;2906:17;;2947:1;2942;:6;;2934:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2998:1;2991:8;;;2828:179;;;;:::o;14479:158::-;14552:4;14576:53;14584:3;:10;;14620:5;14604:23;;14596:32;;14576:7;:53::i;:::-;14569:60;;14479:158;;;;:::o;12103:204::-;12170:7;12219:5;12198:3;:11;;:18;;;;:26;12190:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12281:3;:11;;12293:5;12281:18;;;;;;;;;;;;;;;;12274:25;;12103:204;;;;:::o;11435:129::-;11508:4;11555:1;11532:3;:12;;:19;11545:5;11532:19;;;;;;;;;;;;:24;;11525:31;;11435:129;;;;:::o;11650:109::-;11706:7;11733:3;:11;;:18;;;;11726:25;;11650:109;;;:::o;9805:1544::-;9871:4;9989:18;10010:3;:12;;:19;10023:5;10010:19;;;;;;;;;;;;9989:40;;10060:1;10046:10;:15;10042:1300;;10408:21;10445:1;10432:10;:14;10408:38;;10461:17;10502:1;10481:3;:11;;:18;;;;:22;10461:42;;10748:17;10768:3;:11;;10780:9;10768:22;;;;;;;;;;;;;;;;10748:42;;10914:9;10885:3;:11;;10897:13;10885:26;;;;;;;;;;;;;;;:38;;;;11033:1;11017:13;:17;10991:3;:12;;:23;11004:9;10991:23;;;;;;;;;;;:43;;;;11143:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;11238:3;:12;;:19;11251:5;11238:19;;;;;;;;;;;11231:26;;;11281:4;11274:11;;;;;;;;10042:1300;11325:5;11318:12;;;9805:1544;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;160:352::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;308:1;305;298:12;257:2;341:6;328:20;318:30;;368:18;360:6;357:30;354:2;;;400:1;397;390:12;354:2;434:4;426:6;422:17;410:29;;485:3;477:4;469:6;465:17;455:8;451:32;448:41;445:2;;;502:1;499;492:12;445:2;250:262;;;;;:::o;536:363::-;;;677:3;670:4;662:6;658:17;654:27;644:2;;695:1;692;685:12;644:2;728:6;715:20;705:30;;755:18;747:6;744:30;741:2;;;787:1;784;777:12;741:2;821:4;813:6;809:17;797:29;;872:3;864:4;856:6;852:17;842:8;838:32;835:41;832:2;;;889:1;886;879:12;832:2;637:262;;;;;:::o;925:352::-;;;1055:3;1048:4;1040:6;1036:17;1032:27;1022:2;;1073:1;1070;1063:12;1022:2;1106:6;1093:20;1083:30;;1133:18;1125:6;1122:30;1119:2;;;1165:1;1162;1155:12;1119:2;1199:4;1191:6;1187:17;1175:29;;1250:3;1242:4;1234:6;1230:17;1220:8;1216:32;1213:41;1210:2;;;1267:1;1264;1257:12;1210:2;1015:262;;;;;:::o;1285:130::-;;1365:6;1352:20;1343:29;;1377:33;1404:5;1377:33;:::i;:::-;1337:78;;;;:::o;1436:336::-;;;1550:3;1543:4;1535:6;1531:17;1527:27;1517:2;;1568:1;1565;1558:12;1517:2;1601:6;1588:20;1578:30;;1628:18;1620:6;1617:30;1614:2;;;1660:1;1657;1650:12;1614:2;1694:4;1686:6;1682:17;1670:29;;1745:3;1737:4;1729:6;1725:17;1715:8;1711:32;1708:41;1705:2;;;1762:1;1759;1752:12;1705:2;1510:262;;;;;:::o;1780:130::-;;1860:6;1847:20;1838:29;;1872:33;1899:5;1872:33;:::i;:::-;1832:78;;;;:::o;1917:241::-;;2021:2;2009:9;2000:7;1996:23;1992:32;1989:2;;;2037:1;2034;2027:12;1989:2;2072:1;2089:53;2134:7;2125:6;2114:9;2110:22;2089:53;:::i;:::-;2079:63;;2051:97;1983:175;;;;:::o;2165:867::-;;;;;;;2356:3;2344:9;2335:7;2331:23;2327:33;2324:2;;;2373:1;2370;2363:12;2324:2;2408:1;2425:53;2470:7;2461:6;2450:9;2446:22;2425:53;:::i;:::-;2415:63;;2387:97;2515:2;2533:53;2578:7;2569:6;2558:9;2554:22;2533:53;:::i;:::-;2523:63;;2494:98;2651:2;2640:9;2636:18;2623:32;2675:18;2667:6;2664:30;2661:2;;;2707:1;2704;2697:12;2661:2;2735:64;2791:7;2782:6;2771:9;2767:22;2735:64;:::i;:::-;2717:82;;;;2602:203;2836:2;2854:53;2899:7;2890:6;2879:9;2875:22;2854:53;:::i;:::-;2844:63;;2815:98;2944:3;2963:53;3008:7;2999:6;2988:9;2984:22;2963:53;:::i;:::-;2953:63;;2923:99;2318:714;;;;;;;;:::o;3039:993::-;;;;;;;;3247:3;3235:9;3226:7;3222:23;3218:33;3215:2;;;3264:1;3261;3254:12;3215:2;3299:1;3316:53;3361:7;3352:6;3341:9;3337:22;3316:53;:::i;:::-;3306:63;;3278:97;3406:2;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3385:98;3542:2;3531:9;3527:18;3514:32;3566:18;3558:6;3555:30;3552:2;;;3598:1;3595;3588:12;3552:2;3626:64;3682:7;3673:6;3662:9;3658:22;3626:64;:::i;:::-;3608:82;;;;3493:203;3727:2;3745:53;3790:7;3781:6;3770:9;3766:22;3745:53;:::i;:::-;3735:63;;3706:98;3835:3;3854:53;3899:7;3890:6;3879:9;3875:22;3854:53;:::i;:::-;3844:63;;3814:99;3944:3;3963:53;4008:7;3999:6;3988:9;3984:22;3963:53;:::i;:::-;3953:63;;3923:99;3209:823;;;;;;;;;;:::o;4039:1233::-;;;;;;;;;4327:3;4315:9;4306:7;4302:23;4298:33;4295:2;;;4344:1;4341;4334:12;4295:2;4407:1;4396:9;4392:17;4379:31;4430:18;4422:6;4419:30;4416:2;;;4462:1;4459;4452:12;4416:2;4490:80;4562:7;4553:6;4542:9;4538:22;4490:80;:::i;:::-;4472:98;;;;4358:218;4635:2;4624:9;4620:18;4607:32;4659:18;4651:6;4648:30;4645:2;;;4691:1;4688;4681:12;4645:2;4719:80;4791:7;4782:6;4771:9;4767:22;4719:80;:::i;:::-;4701:98;;;;4586:219;4864:2;4853:9;4849:18;4836:32;4888:18;4880:6;4877:30;4874:2;;;4920:1;4917;4910:12;4874:2;4948:91;5031:7;5022:6;5011:9;5007:22;4948:91;:::i;:::-;4930:109;;;;4815:230;5076:2;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5055:98;5184:3;5203:53;5248:7;5239:6;5228:9;5224:22;5203:53;:::i;:::-;5193:63;;5163:99;4289:983;;;;;;;;;;;:::o;5279:1359::-;;;;;;;;;;5584:3;5572:9;5563:7;5559:23;5555:33;5552:2;;;5601:1;5598;5591:12;5552:2;5664:1;5653:9;5649:17;5636:31;5687:18;5679:6;5676:30;5673:2;;;5719:1;5716;5709:12;5673:2;5747:80;5819:7;5810:6;5799:9;5795:22;5747:80;:::i;:::-;5729:98;;;;5615:218;5892:2;5881:9;5877:18;5864:32;5916:18;5908:6;5905:30;5902:2;;;5948:1;5945;5938:12;5902:2;5976:80;6048:7;6039:6;6028:9;6024:22;5976:80;:::i;:::-;5958:98;;;;5843:219;6121:2;6110:9;6106:18;6093:32;6145:18;6137:6;6134:30;6131:2;;;6177:1;6174;6167:12;6131:2;6205:91;6288:7;6279:6;6268:9;6264:22;6205:91;:::i;:::-;6187:109;;;;6072:230;6333:2;6351:53;6396:7;6387:6;6376:9;6372:22;6351:53;:::i;:::-;6341:63;;6312:98;6441:3;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6420:99;6550:3;6569:53;6614:7;6605:6;6594:9;6590:22;6569:53;:::i;:::-;6559:63;;6529:99;5546:1092;;;;;;;;;;;:::o;6645:241::-;;6749:2;6737:9;6728:7;6724:23;6720:32;6717:2;;;6765:1;6762;6755:12;6717:2;6800:1;6817:53;6862:7;6853:6;6842:9;6838:22;6817:53;:::i;:::-;6807:63;;6779:97;6711:175;;;;:::o;6893:366::-;;;7014:2;7002:9;6993:7;6989:23;6985:32;6982:2;;;7030:1;7027;7020:12;6982:2;7065:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7044:97;7172:2;7190:53;7235:7;7226:6;7215:9;7211:22;7190:53;:::i;:::-;7180:63;;7151:98;6976:283;;;;;:::o;7266:366::-;;;7387:2;7375:9;7366:7;7362:23;7358:32;7355:2;;;7403:1;7400;7393:12;7355:2;7438:1;7455:53;7500:7;7491:6;7480:9;7476:22;7455:53;:::i;:::-;7445:63;;7417:97;7545:2;7563:53;7608:7;7599:6;7588:9;7584:22;7563:53;:::i;:::-;7553:63;;7524:98;7349:283;;;;;:::o;7639:241::-;;7743:2;7731:9;7722:7;7718:23;7714:32;7711:2;;;7759:1;7756;7749:12;7711:2;7794:1;7811:53;7856:7;7847:6;7836:9;7832:22;7811:53;:::i;:::-;7801:63;;7773:97;7705:175;;;;:::o;7888:173::-;;7975:46;8017:3;8009:6;7975:46;:::i;:::-;8050:4;8045:3;8041:14;8027:28;;7968:93;;;;:::o;8070:209::-;;8199:74;8269:3;8261:6;8253;8199:74;:::i;:::-;8185:88;;8178:101;;;;;:::o;8287:103::-;8360:24;8378:5;8360:24;:::i;:::-;8355:3;8348:37;8342:48;;:::o;8397:113::-;8480:24;8498:5;8480:24;:::i;:::-;8475:3;8468:37;8462:48;;:::o;8548:665::-;;8702:86;8781:6;8776:3;8702:86;:::i;:::-;8695:93;;8809:58;8861:5;8809:58;:::i;:::-;8887:7;8915:1;8900:291;8925:6;8922:1;8919:13;8900:291;;;8986:42;9021:6;9012:7;8986:42;:::i;:::-;9042:63;9101:3;9086:13;9042:63;:::i;:::-;9035:70;;9122:62;9177:6;9122:62;:::i;:::-;9112:72;;8957:234;8947:1;8944;8940:9;8935:14;;8900:291;;;8904:14;9204:3;9197:10;;8682:531;;;;;;;:::o;9248:935::-;;9422:95;9510:6;9505:3;9422:95;:::i;:::-;9415:102;;9540:3;9582:4;9574:6;9570:17;9565:3;9561:27;9609:69;9672:5;9609:69;:::i;:::-;9698:7;9726:1;9711:433;9736:6;9733:1;9730:13;9711:433;;;9798:9;9792:4;9788:20;9783:3;9776:33;9852:53;9898:6;9889:7;9852:53;:::i;:::-;9920:99;10014:4;9999:13;9984;9920:99;:::i;:::-;9912:107;;10036:73;10102:6;10036:73;:::i;:::-;10026:83;;10132:4;10127:3;10123:14;10116:21;;9768:376;;9758:1;9755;9751:9;9746:14;;9711:433;;;9715:14;10157:4;10150:11;;10174:3;10167:10;;9402:781;;;;;;;;;:::o;10222:467::-;;10368:86;10447:6;10442:3;10368:86;:::i;:::-;10361:93;;10481:66;10473:6;10470:78;10467:2;;;10561:1;10558;10551:12;10467:2;10594:4;10586:6;10582:17;10572:27;;10611:43;10647:6;10642:3;10635:5;10611:43;:::i;:::-;10676:6;10671:3;10667:16;10660:23;;10354:335;;;;;:::o;10697:104::-;10774:21;10789:5;10774:21;:::i;:::-;10769:3;10762:34;10756:45;;:::o;10808:113::-;10891:24;10909:5;10891:24;:::i;:::-;10886:3;10879:37;10873:48;;:::o;10951:277::-;;11055:60;11108:6;11103:3;11055:60;:::i;:::-;11048:67;;11127:43;11163:6;11158:3;11151:5;11127:43;:::i;:::-;11192:29;11214:6;11192:29;:::i;:::-;11187:3;11183:39;11176:46;;11041:187;;;;;:::o;11259:297::-;;11373:70;11436:6;11431:3;11373:70;:::i;:::-;11366:77;;11455:43;11491:6;11486:3;11479:5;11455:43;:::i;:::-;11520:29;11542:6;11520:29;:::i;:::-;11515:3;11511:39;11504:46;;11359:197;;;;;:::o;11587:310::-;;11719:88;11800:6;11795:3;11719:88;:::i;:::-;11712:95;;11819:43;11855:6;11850:3;11843:5;11819:43;:::i;:::-;11884:6;11879:3;11875:16;11868:23;;11705:192;;;;;:::o;11906:371::-;;12066:67;12130:2;12125:3;12066:67;:::i;:::-;12059:74;;12166:34;12162:1;12157:3;12153:11;12146:55;12235:4;12230:2;12225:3;12221:12;12214:26;12268:2;12263:3;12259:12;12252:19;;12052:225;;;:::o;12286:375::-;;12446:67;12510:2;12505:3;12446:67;:::i;:::-;12439:74;;12546:34;12542:1;12537:3;12533:11;12526:55;12615:8;12610:2;12605:3;12601:12;12594:30;12652:2;12647:3;12643:12;12636:19;;12432:229;;;:::o;12670:384::-;;12830:67;12894:2;12889:3;12830:67;:::i;:::-;12823:74;;12930:34;12926:1;12921:3;12917:11;12910:55;12999:17;12994:2;12989:3;12985:12;12978:39;13045:2;13040:3;13036:12;13029:19;;12816:238;;;:::o;13063:372::-;;13223:67;13287:2;13282:3;13223:67;:::i;:::-;13216:74;;13323:34;13319:1;13314:3;13310:11;13303:55;13392:5;13387:2;13382:3;13378:12;13371:27;13426:2;13421:3;13417:12;13410:19;;13209:226;;;:::o;13444:383::-;;13604:67;13668:2;13663:3;13604:67;:::i;:::-;13597:74;;13704:34;13700:1;13695:3;13691:11;13684:55;13773:16;13768:2;13763:3;13759:12;13752:38;13818:2;13813:3;13809:12;13802:19;;13590:237;;;:::o;13836:327::-;;13996:67;14060:2;14055:3;13996:67;:::i;:::-;13989:74;;14096:29;14092:1;14087:3;14083:11;14076:50;14154:2;14149:3;14145:12;14138:19;;13982:181;;;:::o;14172:385::-;;14332:67;14396:2;14391:3;14332:67;:::i;:::-;14325:74;;14432:34;14428:1;14423:3;14419:11;14412:55;14501:18;14496:2;14491:3;14487:12;14480:40;14548:2;14543:3;14539:12;14532:19;;14318:239;;;:::o;14566:375::-;;14726:67;14790:2;14785:3;14726:67;:::i;:::-;14719:74;;14826:34;14822:1;14817:3;14813:11;14806:55;14895:8;14890:2;14885:3;14881:12;14874:30;14932:2;14927:3;14923:12;14916:19;;14712:229;;;:::o;14950:384::-;;15110:67;15174:2;15169:3;15110:67;:::i;:::-;15103:74;;15210:34;15206:1;15201:3;15197:11;15190:55;15279:17;15274:2;15269:3;15265:12;15258:39;15325:2;15320:3;15316:12;15309:19;;15096:238;;;:::o;15343:379::-;;15503:67;15567:2;15562:3;15503:67;:::i;:::-;15496:74;;15603:34;15599:1;15594:3;15590:11;15583:55;15672:12;15667:2;15662:3;15658:12;15651:34;15713:2;15708:3;15704:12;15697:19;;15489:233;;;:::o;15731:386::-;;15891:67;15955:2;15950:3;15891:67;:::i;:::-;15884:74;;15991:34;15987:1;15982:3;15978:11;15971:55;16060:19;16055:2;16050:3;16046:12;16039:41;16108:2;16103:3;16099:12;16092:19;;15877:240;;;:::o;16126:380::-;;16286:67;16350:2;16345:3;16286:67;:::i;:::-;16279:74;;16386:34;16382:1;16377:3;16373:11;16366:55;16455:13;16450:2;16445:3;16441:12;16434:35;16497:2;16492:3;16488:12;16481:19;;16272:234;;;:::o;16515:384::-;;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16775:34;16771:1;16766:3;16762:11;16755:55;16844:17;16839:2;16834:3;16830:12;16823:39;16890:2;16885:3;16881:12;16874:19;;16661:238;;;:::o;16908:388::-;;17068:67;17132:2;17127:3;17068:67;:::i;:::-;17061:74;;17168:34;17164:1;17159:3;17155:11;17148:55;17237:21;17232:2;17227:3;17223:12;17216:43;17287:2;17282:3;17278:12;17271:19;;17054:242;;;:::o;17304:113::-;17387:24;17405:5;17387:24;:::i;:::-;17382:3;17375:37;17369:48;;:::o;17424:291::-;;17587:103;17686:3;17677:6;17669;17587:103;:::i;:::-;17580:110;;17707:3;17700:10;;17568:147;;;;;:::o;17722:222::-;;17849:2;17838:9;17834:18;17826:26;;17863:71;17931:1;17920:9;17916:17;17907:6;17863:71;:::i;:::-;17820:124;;;;:::o;17951:548::-;;18162:2;18151:9;18147:18;18139:26;;18176:71;18244:1;18233:9;18229:17;18220:6;18176:71;:::i;:::-;18258:72;18326:2;18315:9;18311:18;18302:6;18258:72;:::i;:::-;18378:9;18372:4;18368:20;18363:2;18352:9;18348:18;18341:48;18403:86;18484:4;18475:6;18467;18403:86;:::i;:::-;18395:94;;18133:366;;;;;;;:::o;18506:772::-;;18773:3;18762:9;18758:19;18750:27;;18788:71;18856:1;18845:9;18841:17;18832:6;18788:71;:::i;:::-;18870:72;18938:2;18927:9;18923:18;18914:6;18870:72;:::i;:::-;18990:9;18984:4;18980:20;18975:2;18964:9;18960:18;18953:48;19015:86;19096:4;19087:6;19079;19015:86;:::i;:::-;19007:94;;19112:72;19180:2;19169:9;19165:18;19156:6;19112:72;:::i;:::-;19195:73;19263:3;19252:9;19248:19;19239:6;19195:73;:::i;:::-;18744:534;;;;;;;;;:::o;19285:772::-;;19552:3;19541:9;19537:19;19529:27;;19567:71;19635:1;19624:9;19620:17;19611:6;19567:71;:::i;:::-;19649:72;19717:2;19706:9;19702:18;19693:6;19649:72;:::i;:::-;19769:9;19763:4;19759:20;19754:2;19743:9;19739:18;19732:48;19794:86;19875:4;19866:6;19858;19794:86;:::i;:::-;19786:94;;19891:72;19959:2;19948:9;19944:18;19935:6;19891:72;:::i;:::-;19974:73;20042:3;20031:9;20027:19;20018:6;19974:73;:::i;:::-;19523:534;;;;;;;;;:::o;20064:1212::-;;20503:3;20492:9;20488:19;20480:27;;20554:9;20548:4;20544:20;20540:1;20529:9;20525:17;20518:47;20579:118;20692:4;20683:6;20675;20579:118;:::i;:::-;20571:126;;20745:9;20739:4;20735:20;20730:2;20719:9;20715:18;20708:48;20770:118;20883:4;20874:6;20866;20770:118;:::i;:::-;20762:126;;20936:9;20930:4;20926:20;20921:2;20910:9;20906:18;20899:48;20961:138;21094:4;21085:6;21077;20961:138;:::i;:::-;20953:146;;21110:72;21178:2;21167:9;21163:18;21154:6;21110:72;:::i;:::-;21193:73;21261:3;21250:9;21246:19;21237:6;21193:73;:::i;:::-;20474:802;;;;;;;;;;;:::o;21283:210::-;;21404:2;21393:9;21389:18;21381:26;;21418:65;21480:1;21469:9;21465:17;21456:6;21418:65;:::i;:::-;21375:118;;;;:::o;21500:222::-;;21627:2;21616:9;21612:18;21604:26;;21641:71;21709:1;21698:9;21694:17;21685:6;21641:71;:::i;:::-;21598:124;;;;:::o;21729:416::-;;21929:2;21918:9;21914:18;21906:26;;21979:9;21973:4;21969:20;21965:1;21954:9;21950:17;21943:47;22004:131;22130:4;22004:131;:::i;:::-;21996:139;;21900:245;;;:::o;22152:416::-;;22352:2;22341:9;22337:18;22329:26;;22402:9;22396:4;22392:20;22388:1;22377:9;22373:17;22366:47;22427:131;22553:4;22427:131;:::i;:::-;22419:139;;22323:245;;;:::o;22575:416::-;;22775:2;22764:9;22760:18;22752:26;;22825:9;22819:4;22815:20;22811:1;22800:9;22796:17;22789:47;22850:131;22976:4;22850:131;:::i;:::-;22842:139;;22746:245;;;:::o;22998:416::-;;23198:2;23187:9;23183:18;23175:26;;23248:9;23242:4;23238:20;23234:1;23223:9;23219:17;23212:47;23273:131;23399:4;23273:131;:::i;:::-;23265:139;;23169:245;;;:::o;23421:416::-;;23621:2;23610:9;23606:18;23598:26;;23671:9;23665:4;23661:20;23657:1;23646:9;23642:17;23635:47;23696:131;23822:4;23696:131;:::i;:::-;23688:139;;23592:245;;;:::o;23844:416::-;;24044:2;24033:9;24029:18;24021:26;;24094:9;24088:4;24084:20;24080:1;24069:9;24065:17;24058:47;24119:131;24245:4;24119:131;:::i;:::-;24111:139;;24015:245;;;:::o;24267:416::-;;24467:2;24456:9;24452:18;24444:26;;24517:9;24511:4;24507:20;24503:1;24492:9;24488:17;24481:47;24542:131;24668:4;24542:131;:::i;:::-;24534:139;;24438:245;;;:::o;24690:416::-;;24890:2;24879:9;24875:18;24867:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24965:131;25091:4;24965:131;:::i;:::-;24957:139;;24861:245;;;:::o;25113:416::-;;25313:2;25302:9;25298:18;25290:26;;25363:9;25357:4;25353:20;25349:1;25338:9;25334:17;25327:47;25388:131;25514:4;25388:131;:::i;:::-;25380:139;;25284:245;;;:::o;25536:416::-;;25736:2;25725:9;25721:18;25713:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25811:131;25937:4;25811:131;:::i;:::-;25803:139;;25707:245;;;:::o;25959:416::-;;26159:2;26148:9;26144:18;26136:26;;26209:9;26203:4;26199:20;26195:1;26184:9;26180:17;26173:47;26234:131;26360:4;26234:131;:::i;:::-;26226:139;;26130:245;;;:::o;26382:416::-;;26582:2;26571:9;26567:18;26559:26;;26632:9;26626:4;26622:20;26618:1;26607:9;26603:17;26596:47;26657:131;26783:4;26657:131;:::i;:::-;26649:139;;26553:245;;;:::o;26805:416::-;;27005:2;26994:9;26990:18;26982:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27080:131;27206:4;27080:131;:::i;:::-;27072:139;;26976:245;;;:::o;27228:416::-;;27428:2;27417:9;27413:18;27405:26;;27478:9;27472:4;27468:20;27464:1;27453:9;27449:17;27442:47;27503:131;27629:4;27503:131;:::i;:::-;27495:139;;27399:245;;;:::o;27651:222::-;;27778:2;27767:9;27763:18;27755:26;;27792:71;27860:1;27849:9;27845:17;27836:6;27792:71;:::i;:::-;27749:124;;;;:::o;27880:333::-;;28035:2;28024:9;28020:18;28012:26;;28049:71;28117:1;28106:9;28102:17;28093:6;28049:71;:::i;:::-;28131:72;28199:2;28188:9;28184:18;28175:6;28131:72;:::i;:::-;28006:207;;;;;:::o;28220:506::-;;;28355:11;28342:25;28451:1;28445:4;28441:12;28430:8;28414:14;28410:29;28406:48;28386:18;28382:73;28372:2;;28469:1;28466;28459:12;28372:2;28500:18;28490:8;28486:33;28478:41;;28553:4;28540:18;28530:28;;28578:18;28570:6;28567:30;28564:2;;;28610:1;28607;28600:12;28564:2;28638;28632:4;28628:13;28620:21;;28692:4;28684:6;28680:17;28664:14;28660:38;28654:4;28650:49;28647:2;;;28712:1;28709;28702:12;28647:2;28310:416;;;;;;:::o;28733:118::-;;28821:3;28813:11;;28807:44;;;:::o;28858:129::-;;28957:3;28949:11;;28943:44;;;:::o;28994:110::-;;29094:4;29089:3;29085:14;29077:22;;29071:33;;;:::o;29111:121::-;;29222:4;29217:3;29213:14;29205:22;;29199:33;;;:::o;29240:178::-;;29370:6;29365:3;29358:19;29407:4;29402:3;29398:14;29383:29;;29351:67;;;;:::o;29427:187::-;;29566:6;29561:3;29554:19;29603:4;29598:3;29594:14;29579:29;;29547:67;;;;:::o;29623:178::-;;29753:6;29748:3;29741:19;29790:4;29785:3;29781:14;29766:29;;29734:67;;;;:::o;29810:152::-;;29914:6;29909:3;29902:19;29951:4;29946:3;29942:14;29927:29;;29895:67;;;;:::o;29971:162::-;;30085:6;30080:3;30073:19;30122:4;30117:3;30113:14;30098:29;;30066:67;;;;:::o;30142:144::-;;30277:3;30262:18;;30255:31;;;;:::o;30295:163::-;;30410:6;30405:3;30398:19;30447:4;30442:3;30438:14;30423:29;;30391:67;;;;:::o;30467:119::-;;30541:39;30576:2;30571:3;30567:12;30562:3;30541:39;:::i;:::-;30532:48;;30525:61;;;;:::o;30595:501::-;;;30719:3;30706:17;30808:1;30802:4;30798:12;30787:8;30771:14;30767:29;30763:48;30743:18;30739:73;30729:2;;30826:1;30823;30816:12;30729:2;30869:8;30849:18;30845:33;30836:42;;30913:5;30900:19;30890:29;;30945:4;30938:5;30934:16;30925:25;;30970:18;30962:6;30959:30;30956:2;;;31002:1;30999;30992:12;30956:2;31061:4;31053:6;31049:17;31033:14;31029:38;31019:8;31015:53;31012:2;;;31081:1;31078;31071:12;31012:2;30673:423;;;;;;:::o;31104:91::-;;31166:24;31184:5;31166:24;:::i;:::-;31155:35;;31149:46;;;:::o;31202:85::-;;31275:5;31268:13;31261:21;31250:32;;31244:43;;;:::o;31294:72::-;;31356:5;31345:16;;31339:27;;;:::o;31373:121::-;;31446:42;31439:5;31435:54;31424:65;;31418:76;;;:::o;31501:72::-;;31563:5;31552:16;;31546:27;;;:::o;31581:145::-;31662:6;31657:3;31652;31639:30;31718:1;31709:6;31704:3;31700:16;31693:27;31632:94;;;:::o;31734:97::-;;31822:2;31818:7;31813:2;31806:5;31802:14;31798:28;31788:38;;31782:49;;;:::o;31839:117::-;31908:24;31926:5;31908:24;:::i;:::-;31901:5;31898:35;31888:2;;31947:1;31944;31937:12;31888:2;31882:74;:::o;31963:117::-;32032:24;32050:5;32032:24;:::i;:::-;32025:5;32022:35;32012:2;;32071:1;32068;32061:12;32012:2;32006:74;:::o;32087:117::-;32156:24;32174:5;32156:24;:::i;:::-;32149:5;32146:35;32136:2;;32195:1;32192;32185:12;32136:2;32130:74;:::o

Swarm Source

ipfs://0aa1981c3ff8d8bbfacd3629002a2f0aeb5d84fcf31680e461d30da9f668f069
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading