Contract
0xd9a6d1ea0d0f4795985725c7bd40c31a667c033d
2
Contract Overview
Balance:
0 DEV
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x5ee1059f89493ee9d5d1313cac464b46367d8de7f02fdc3a14902dc56c34fe43 | 0x6123dd61 | 1815660 | 447 days 17 hrs ago | 0x8d86bc475bedcb08179c5e6a4d494ebd3b44ea8b | IN | Create: WitnetDecoderLib | 0 DEV | 0.002036059 |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
WitnetDecoderLib
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at moonbase.moonscan.io on 2022-03-08 */ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; // File: contracts\interfaces\IWitnetRequest.sol /// @title The Witnet Data Request basic interface. /// @author The Witnet Foundation. interface IWitnetRequest { /// A `IWitnetRequest` is constructed around a `bytes` value containing /// a well-formed Witnet Data Request using Protocol Buffers. function bytecode() external view returns (bytes memory); /// Returns SHA256 hash of Witnet Data Request as CBOR-encoded bytes. function hash() external view returns (bytes32); } // File: contracts\libs\Witnet.sol library Witnet { /// @notice Witnet function that computes the hash of a CBOR-encoded Data Request. /// @param _bytecode CBOR-encoded RADON. function hash(bytes memory _bytecode) internal pure returns (bytes32) { return sha256(_bytecode); } /// Struct containing both request and response data related to every query posted to the Witnet Request Board struct Query { Request request; Response response; address from; // Address from which the request was posted. } /// Possible status of a Witnet query. enum QueryStatus { Unknown, Posted, Reported, Deleted } /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { IWitnetRequest addr; // The contract containing the Data Request which execution has been requested. address requester; // Address from which the request was posted. bytes32 hash; // Hash of the Data Request whose execution has been requested. uint256 gasprice; // Minimum gas price the DR resolver should pay on the solving tx. uint256 reward; // Escrowed reward to be paid to the DR resolver. } /// Data kept in EVM-storage containing Witnet-provided response metadata and result. struct Response { address reporter; // Address from which the result was reported. uint256 timestamp; // Timestamp of the Witnet-provided result. bytes32 drTxHash; // Hash of the Witnet transaction that solved the queried Data Request. bytes cborBytes; // Witnet-provided result CBOR-bytes to the queried Data Request. } /// Data struct containing the Witnet-provided result to a Data Request. struct Result { bool success; // Flag stating whether the request could get solved successfully, or not. CBOR value; // Resulting value, in CBOR-serialized bytes. } /// Data struct following the RFC-7049 standard: Concise Binary Object Representation. struct CBOR { Buffer buffer; uint8 initialByte; uint8 majorType; uint8 additionalInformation; uint64 len; uint64 tag; } /// Iterable bytes buffer. struct Buffer { bytes data; uint32 cursor; } /// Witnet error codes table. enum ErrorCodes { // 0x00: Unknown error. Something went really bad! Unknown, // Script format errors /// 0x01: At least one of the source scripts is not a valid CBOR-encoded value. SourceScriptNotCBOR, /// 0x02: The CBOR value decoded from a source script is not an Array. SourceScriptNotArray, /// 0x03: The Array value decoded form a source script is not a valid Data Request. SourceScriptNotRADON, /// Unallocated ScriptFormat0x04, ScriptFormat0x05, ScriptFormat0x06, ScriptFormat0x07, ScriptFormat0x08, ScriptFormat0x09, ScriptFormat0x0A, ScriptFormat0x0B, ScriptFormat0x0C, ScriptFormat0x0D, ScriptFormat0x0E, ScriptFormat0x0F, // Complexity errors /// 0x10: The request contains too many sources. RequestTooManySources, /// 0x11: The script contains too many calls. ScriptTooManyCalls, /// Unallocated Complexity0x12, Complexity0x13, Complexity0x14, Complexity0x15, Complexity0x16, Complexity0x17, Complexity0x18, Complexity0x19, Complexity0x1A, Complexity0x1B, Complexity0x1C, Complexity0x1D, Complexity0x1E, Complexity0x1F, // Operator errors /// 0x20: The operator does not exist. UnsupportedOperator, /// Unallocated Operator0x21, Operator0x22, Operator0x23, Operator0x24, Operator0x25, Operator0x26, Operator0x27, Operator0x28, Operator0x29, Operator0x2A, Operator0x2B, Operator0x2C, Operator0x2D, Operator0x2E, Operator0x2F, // Retrieval-specific errors /// 0x30: At least one of the sources could not be retrieved, but returned HTTP error. HTTP, /// 0x31: Retrieval of at least one of the sources timed out. RetrievalTimeout, /// Unallocated Retrieval0x32, Retrieval0x33, Retrieval0x34, Retrieval0x35, Retrieval0x36, Retrieval0x37, Retrieval0x38, Retrieval0x39, Retrieval0x3A, Retrieval0x3B, Retrieval0x3C, Retrieval0x3D, Retrieval0x3E, Retrieval0x3F, // Math errors /// 0x40: Math operator caused an underflow. Underflow, /// 0x41: Math operator caused an overflow. Overflow, /// 0x42: Tried to divide by zero. DivisionByZero, /// Unallocated Math0x43, Math0x44, Math0x45, Math0x46, Math0x47, Math0x48, Math0x49, Math0x4A, Math0x4B, Math0x4C, Math0x4D, Math0x4E, Math0x4F, // Other errors /// 0x50: Received zero reveals NoReveals, /// 0x51: Insufficient consensus in tally precondition clause InsufficientConsensus, /// 0x52: Received zero commits InsufficientCommits, /// 0x53: Generic error during tally execution TallyExecution, /// Unallocated OtherError0x54, OtherError0x55, OtherError0x56, OtherError0x57, OtherError0x58, OtherError0x59, OtherError0x5A, OtherError0x5B, OtherError0x5C, OtherError0x5D, OtherError0x5E, OtherError0x5F, /// 0x60: Invalid reveal serialization (malformed reveals are converted to this value) MalformedReveal, /// Unallocated OtherError0x61, OtherError0x62, OtherError0x63, OtherError0x64, OtherError0x65, OtherError0x66, OtherError0x67, OtherError0x68, OtherError0x69, OtherError0x6A, OtherError0x6B, OtherError0x6C, OtherError0x6D, OtherError0x6E, OtherError0x6F, // Access errors /// 0x70: Tried to access a value from an index using an index that is out of bounds ArrayIndexOutOfBounds, /// 0x71: Tried to access a value from a map using a key that does not exist MapKeyNotFound, /// Unallocated OtherError0x72, OtherError0x73, OtherError0x74, OtherError0x75, OtherError0x76, OtherError0x77, OtherError0x78, OtherError0x79, OtherError0x7A, OtherError0x7B, OtherError0x7C, OtherError0x7D, OtherError0x7E, OtherError0x7F, OtherError0x80, OtherError0x81, OtherError0x82, OtherError0x83, OtherError0x84, OtherError0x85, OtherError0x86, OtherError0x87, OtherError0x88, OtherError0x89, OtherError0x8A, OtherError0x8B, OtherError0x8C, OtherError0x8D, OtherError0x8E, OtherError0x8F, OtherError0x90, OtherError0x91, OtherError0x92, OtherError0x93, OtherError0x94, OtherError0x95, OtherError0x96, OtherError0x97, OtherError0x98, OtherError0x99, OtherError0x9A, OtherError0x9B, OtherError0x9C, OtherError0x9D, OtherError0x9E, OtherError0x9F, OtherError0xA0, OtherError0xA1, OtherError0xA2, OtherError0xA3, OtherError0xA4, OtherError0xA5, OtherError0xA6, OtherError0xA7, OtherError0xA8, OtherError0xA9, OtherError0xAA, OtherError0xAB, OtherError0xAC, OtherError0xAD, OtherError0xAE, OtherError0xAF, OtherError0xB0, OtherError0xB1, OtherError0xB2, OtherError0xB3, OtherError0xB4, OtherError0xB5, OtherError0xB6, OtherError0xB7, OtherError0xB8, OtherError0xB9, OtherError0xBA, OtherError0xBB, OtherError0xBC, OtherError0xBD, OtherError0xBE, OtherError0xBF, OtherError0xC0, OtherError0xC1, OtherError0xC2, OtherError0xC3, OtherError0xC4, OtherError0xC5, OtherError0xC6, OtherError0xC7, OtherError0xC8, OtherError0xC9, OtherError0xCA, OtherError0xCB, OtherError0xCC, OtherError0xCD, OtherError0xCE, OtherError0xCF, OtherError0xD0, OtherError0xD1, OtherError0xD2, OtherError0xD3, OtherError0xD4, OtherError0xD5, OtherError0xD6, OtherError0xD7, OtherError0xD8, OtherError0xD9, OtherError0xDA, OtherError0xDB, OtherError0xDC, OtherError0xDD, OtherError0xDE, OtherError0xDF, // Bridge errors: errors that only belong in inter-client communication /// 0xE0: Requests that cannot be parsed must always get this error as their result. /// However, this is not a valid result in a Tally transaction, because invalid requests /// are never included into blocks and therefore never get a Tally in response. BridgeMalformedRequest, /// 0xE1: Witnesses exceeds 100 BridgePoorIncentives, /// 0xE2: The request is rejected on the grounds that it may cause the submitter to spend or stake an /// amount of value that is unjustifiably high when compared with the reward they will be getting BridgeOversizedResult, /// Unallocated OtherError0xE3, OtherError0xE4, OtherError0xE5, OtherError0xE6, OtherError0xE7, OtherError0xE8, OtherError0xE9, OtherError0xEA, OtherError0xEB, OtherError0xEC, OtherError0xED, OtherError0xEE, OtherError0xEF, OtherError0xF0, OtherError0xF1, OtherError0xF2, OtherError0xF3, OtherError0xF4, OtherError0xF5, OtherError0xF6, OtherError0xF7, OtherError0xF8, OtherError0xF9, OtherError0xFA, OtherError0xFB, OtherError0xFC, OtherError0xFD, OtherError0xFE, // This should not exist: /// 0xFF: Some tally error is not intercepted but should UnhandledIntercept } } // File: contracts\libs\WitnetBuffer.sol /// @title A convenient wrapper around the `bytes memory` type that exposes a buffer-like interface /// @notice The buffer has an inner cursor that tracks the final offset of every read, i.e. any subsequent read will /// start with the byte that goes right after the last one in the previous read. /// @dev `uint32` is used here for `cursor` because `uint16` would only enable seeking up to 8KB, which could in some /// theoretical use cases be exceeded. Conversely, `uint32` supports up to 512MB, which cannot credibly be exceeded. /// @author The Witnet Foundation. library WitnetBuffer { // Ensures we access an existing index in an array modifier notOutOfBounds(uint32 index, uint256 length) { require(index < length, "WitnetBuffer: Tried to read from a consumed Buffer (must rewind it first)"); _; } /// @notice Read and consume a certain amount of bytes from the buffer. /// @param _buffer An instance of `Witnet.Buffer`. /// @param _length How many bytes to read and consume from the buffer. /// @return A `bytes memory` containing the first `_length` bytes from the buffer, counting from the cursor position. function read(Witnet.Buffer memory _buffer, uint32 _length) internal pure returns (bytes memory) { // Make sure not to read out of the bounds of the original bytes require(_buffer.cursor + _length <= _buffer.data.length, "WitnetBuffer: Not enough bytes in buffer when reading"); // Create a new `bytes memory destination` value bytes memory destination = new bytes(_length); // Early return in case that bytes length is 0 if (_length != 0) { bytes memory source = _buffer.data; uint32 offset = _buffer.cursor; // Get raw pointers for source and destination uint sourcePointer; uint destinationPointer; assembly { sourcePointer := add(add(source, 32), offset) destinationPointer := add(destination, 32) } // Copy `_length` bytes from source to destination memcpy(destinationPointer, sourcePointer, uint(_length)); // Move the cursor forward by `_length` bytes seek(_buffer, _length, true); } return destination; } /// @notice Read and consume the next byte from the buffer. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The next byte in the buffer counting from the cursor position. function next(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor, _buffer.data.length) returns (bytes1) { // Return the byte at the position marked by the cursor and advance the cursor all at once return _buffer.data[_buffer.cursor++]; } /// @notice Move the inner cursor of the buffer to a relative or absolute position. /// @param _buffer An instance of `Witnet.Buffer`. /// @param _offset How many bytes to move the cursor forward. /// @param _relative Whether to count `_offset` from the last position of the cursor (`true`) or the beginning of the /// buffer (`true`). /// @return The final position of the cursor (will equal `_offset` if `_relative` is `false`). // solium-disable-next-line security/no-assign-params function seek(Witnet.Buffer memory _buffer, uint32 _offset, bool _relative) internal pure returns (uint32) { // Deal with relative offsets if (_relative) { require(_offset + _buffer.cursor > _offset, "WitnetBuffer: Integer overflow when seeking"); _offset += _buffer.cursor; } // Make sure not to read out of the bounds of the original bytes require(_offset <= _buffer.data.length, "WitnetBuffer: Not enough bytes in buffer when seeking"); _buffer.cursor = _offset; return _buffer.cursor; } /// @notice Move the inner cursor a number of bytes forward. /// @dev This is a simple wrapper around the relative offset case of `seek()`. /// @param _buffer An instance of `Witnet.Buffer`. /// @param _relativeOffset How many bytes to move the cursor forward. /// @return The final position of the cursor. function seek(Witnet.Buffer memory _buffer, uint32 _relativeOffset) internal pure returns (uint32) { return seek(_buffer, _relativeOffset, true); } /// @notice Move the inner cursor back to the first byte in the buffer. /// @param _buffer An instance of `Witnet.Buffer`. function rewind(Witnet.Buffer memory _buffer) internal pure { _buffer.cursor = 0; } /// @notice Read and consume the next byte from the buffer as an `uint8`. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint8` value of the next byte in the buffer counting from the cursor position. function readUint8(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor, _buffer.data.length) returns (uint8) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint8 value; assembly { value := mload(add(add(bytesValue, 1), offset)) } _buffer.cursor++; return value; } /// @notice Read and consume the next 2 bytes from the buffer as an `uint16`. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint16` value of the next 2 bytes in the buffer counting from the cursor position. function readUint16(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor + 1, _buffer.data.length) returns (uint16) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint16 value; assembly { value := mload(add(add(bytesValue, 2), offset)) } _buffer.cursor += 2; return value; } /// @notice Read and consume the next 4 bytes from the buffer as an `uint32`. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint32` value of the next 4 bytes in the buffer counting from the cursor position. function readUint32(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor + 3, _buffer.data.length) returns (uint32) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint32 value; assembly { value := mload(add(add(bytesValue, 4), offset)) } _buffer.cursor += 4; return value; } /// @notice Read and consume the next 8 bytes from the buffer as an `uint64`. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint64` value of the next 8 bytes in the buffer counting from the cursor position. function readUint64(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor + 7, _buffer.data.length) returns (uint64) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint64 value; assembly { value := mload(add(add(bytesValue, 8), offset)) } _buffer.cursor += 8; return value; } /// @notice Read and consume the next 16 bytes from the buffer as an `uint128`. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint128` value of the next 16 bytes in the buffer counting from the cursor position. function readUint128(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor + 15, _buffer.data.length) returns (uint128) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint128 value; assembly { value := mload(add(add(bytesValue, 16), offset)) } _buffer.cursor += 16; return value; } /// @notice Read and consume the next 32 bytes from the buffer as an `uint256`. /// @return The `uint256` value of the next 32 bytes in the buffer counting from the cursor position. /// @param _buffer An instance of `Witnet.Buffer`. function readUint256(Witnet.Buffer memory _buffer) internal pure notOutOfBounds(_buffer.cursor + 31, _buffer.data.length) returns (uint256) { bytes memory bytesValue = _buffer.data; uint32 offset = _buffer.cursor; uint256 value; assembly { value := mload(add(add(bytesValue, 32), offset)) } _buffer.cursor += 32; return value; } /// @notice Read and consume the next 2 bytes from the buffer as an IEEE 754-2008 floating point number enclosed in an /// `int32`. /// @dev Due to the lack of support for floating or fixed point arithmetic in the EVM, this method offsets all values /// by 5 decimal orders so as to get a fixed precision of 5 decimal positions, which should be OK for most `float16` /// use cases. In other words, the integer output of this method is 10,000 times the actual value. The input bytes are /// expected to follow the 16-bit base-2 format (a.k.a. `binary16`) in the IEEE 754-2008 standard. /// @param _buffer An instance of `Witnet.Buffer`. /// @return The `uint32` value of the next 4 bytes in the buffer counting from the cursor position. function readFloat16(Witnet.Buffer memory _buffer) internal pure returns (int32) { uint32 bytesValue = readUint16(_buffer); // Get bit at position 0 uint32 sign = bytesValue & 0x8000; // Get bits 1 to 5, then normalize to the [-14, 15] range so as to counterweight the IEEE 754 exponent bias int32 exponent = (int32(bytesValue & 0x7c00) >> 10) - 15; // Get bits 6 to 15 int32 significand = int32(bytesValue & 0x03ff); // Add 1024 to the fraction if the exponent is 0 if (exponent == 15) { significand |= 0x400; } // Compute `2 ^ exponent · (1 + fraction / 1024)` int32 result = 0; if (exponent >= 0) { result = int32((int256(1 << uint256(int256(exponent))) * 10000 * int256(uint256(int256(significand)) | 0x400)) >> 10); } else { result = int32(((int256(uint256(int256(significand)) | 0x400) * 10000) / int256(1 << uint256(int256(- exponent)))) >> 10); } // Make the result negative if the sign bit is not 0 if (sign != 0) { result *= - 1; } return result; } /// @notice Copy bytes from one memory address into another. /// @dev This function was borrowed from Nick Johnson's `solidity-stringutils` lib, and reproduced here under the terms /// of [Apache License 2.0](https://github.com/Arachnid/solidity-stringutils/blob/master/LICENSE). /// @param _dest Address of the destination memory. /// @param _src Address to the source memory. /// @param _len How many bytes to copy. // solium-disable-next-line security/no-assign-params function memcpy(uint _dest, uint _src, uint _len) private pure { require(_len > 0, "WitnetBuffer: Cannot copy 0 bytes"); // Copy word-length chunks while possible for (; _len >= 32; _len -= 32) { assembly { mstore(_dest, mload(_src)) } _dest += 32; _src += 32; } if (_len > 0) { // Copy remaining bytes uint mask = 256 ** (32 - _len) - 1; assembly { let srcpart := and(mload(_src), not(mask)) let destpart := and(mload(_dest), mask) mstore(_dest, or(destpart, srcpart)) } } } } // File: contracts\libs\WitnetDecoderLib.sol /// @title A minimalistic implementation of “RFC 7049 Concise Binary Object Representation” /// @notice This library leverages a buffer-like structure for step-by-step decoding of bytes so as to minimize /// the gas cost of decoding them into a useful native type. /// @dev Most of the logic has been borrowed from Patrick Gansterer’s cbor.js library: https://github.com/paroga/cbor-js /// @author The Witnet Foundation. /// /// TODO: add support for Array (majorType = 4) /// TODO: add support for Map (majorType = 5) /// TODO: add support for Float32 (majorType = 7, additionalInformation = 26) /// TODO: add support for Float64 (majorType = 7, additionalInformation = 27) library WitnetDecoderLib { using WitnetBuffer for Witnet.Buffer; uint32 constant internal _UINT32_MAX = type(uint32).max; uint64 constant internal _UINT64_MAX = type(uint64).max; /// @notice Decode a `Witnet.CBOR` structure into a native `bool` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as a `bool` value. function decodeBool(Witnet.CBOR memory _cborValue) public pure returns(bool) { _cborValue.len = readLength(_cborValue.buffer, _cborValue.additionalInformation); require(_cborValue.majorType == 7, "WitnetDecoderLib: Tried to read a `bool` value from a `Witnet.CBOR` with majorType != 7"); if (_cborValue.len == 20) { return false; } else if (_cborValue.len == 21) { return true; } else { revert("WitnetDecoderLib: Tried to read `bool` from a `Witnet.CBOR` with len different than 20 or 21"); } } /// @notice Decode a `Witnet.CBOR` structure into a native `bytes` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as a `bytes` value. function decodeBytes(Witnet.CBOR memory _cborValue) public pure returns(bytes memory) { _cborValue.len = readLength(_cborValue.buffer, _cborValue.additionalInformation); if (_cborValue.len == _UINT32_MAX) { bytes memory bytesData; // These checks look repetitive but the equivalent loop would be more expensive. uint32 itemLength = uint32(readIndefiniteStringLength(_cborValue.buffer, _cborValue.majorType)); if (itemLength < _UINT32_MAX) { bytesData = abi.encodePacked(bytesData, _cborValue.buffer.read(itemLength)); itemLength = uint32(readIndefiniteStringLength(_cborValue.buffer, _cborValue.majorType)); if (itemLength < _UINT32_MAX) { bytesData = abi.encodePacked(bytesData, _cborValue.buffer.read(itemLength)); } } return bytesData; } else { return _cborValue.buffer.read(uint32(_cborValue.len)); } } /// @notice Decode a `Witnet.CBOR` structure into a native `bytes32` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return _bytes32 The value represented by the input, as a `bytes32` value. function decodeBytes32(Witnet.CBOR memory _cborValue) public pure returns(bytes32 _bytes32) { bytes memory _bb = decodeBytes(_cborValue); uint _len = _bb.length > 32 ? 32 : _bb.length; for (uint _i = 0; _i < _len; _i ++) { _bytes32 |= bytes32(_bb[_i] & 0xff) >> (_i * 8); } } /// @notice Decode a `Witnet.CBOR` structure into a `fixed16` value. /// @dev Due to the lack of support for floating or fixed point arithmetic in the EVM, this method offsets all values /// by 5 decimal orders so as to get a fixed precision of 5 decimal positions, which should be OK for most `fixed16` /// use cases. In other words, the output of this method is 10,000 times the actual value, encoded into an `int32`. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `int128` value. function decodeFixed16(Witnet.CBOR memory _cborValue) public pure returns(int32) { require(_cborValue.majorType == 7, "WitnetDecoderLib: Tried to read a `fixed` value from a `WT.CBOR` with majorType != 7"); require(_cborValue.additionalInformation == 25, "WitnetDecoderLib: Tried to read `fixed16` from a `WT.CBOR` with additionalInformation != 25"); return _cborValue.buffer.readFloat16(); } /// @notice Decode a `Witnet.CBOR` structure into a native `int128[]` value whose inner values follow the same convention. /// as explained in `decodeFixed16`. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `int128[]` value. function decodeFixed16Array(Witnet.CBOR memory _cborValue) external pure returns(int32[] memory) { require(_cborValue.majorType == 4, "WitnetDecoderLib: Tried to read `int128[]` from a `Witnet.CBOR` with majorType != 4"); uint64 length = readLength(_cborValue.buffer, _cborValue.additionalInformation); require(length < _UINT64_MAX, "WitnetDecoderLib: Indefinite-length CBOR arrays are not supported"); int32[] memory array = new int32[](length); for (uint64 i = 0; i < length; i++) { Witnet.CBOR memory item = valueFromBuffer(_cborValue.buffer); array[i] = decodeFixed16(item); } return array; } /// @notice Decode a `Witnet.CBOR` structure into a native `int128` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `int128` value. function decodeInt128(Witnet.CBOR memory _cborValue) public pure returns(int128) { if (_cborValue.majorType == 1) { uint64 length = readLength(_cborValue.buffer, _cborValue.additionalInformation); return int128(-1) - int128(uint128(length)); } else if (_cborValue.majorType == 0) { // Any `uint64` can be safely casted to `int128`, so this method supports majorType 1 as well so as to have offer // a uniform API for positive and negative numbers return int128(uint128(decodeUint64(_cborValue))); } revert("WitnetDecoderLib: Tried to read `int128` from a `Witnet.CBOR` with majorType not 0 or 1"); } /// @notice Decode a `Witnet.CBOR` structure into a native `int128[]` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `int128[]` value. function decodeInt128Array(Witnet.CBOR memory _cborValue) external pure returns(int128[] memory) { require(_cborValue.majorType == 4, "WitnetDecoderLib: Tried to read `int128[]` from a `Witnet.CBOR` with majorType != 4"); uint64 length = readLength(_cborValue.buffer, _cborValue.additionalInformation); require(length < _UINT64_MAX, "WitnetDecoderLib: Indefinite-length CBOR arrays are not supported"); int128[] memory array = new int128[](length); for (uint64 i = 0; i < length; i++) { Witnet.CBOR memory item = valueFromBuffer(_cborValue.buffer); array[i] = decodeInt128(item); } return array; } /// @notice Decode a `Witnet.CBOR` structure into a native `string` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as a `string` value. function decodeString(Witnet.CBOR memory _cborValue) public pure returns(string memory) { _cborValue.len = readLength(_cborValue.buffer, _cborValue.additionalInformation); if (_cborValue.len == _UINT64_MAX) { bytes memory textData; bool done; while (!done) { uint64 itemLength = readIndefiniteStringLength(_cborValue.buffer, _cborValue.majorType); if (itemLength < _UINT64_MAX) { textData = abi.encodePacked(textData, readText(_cborValue.buffer, itemLength / 4)); } else { done = true; } } return string(textData); } else { return string(readText(_cborValue.buffer, _cborValue.len)); } } /// @notice Decode a `Witnet.CBOR` structure into a native `string[]` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `string[]` value. function decodeStringArray(Witnet.CBOR memory _cborValue) external pure returns(string[] memory) { require(_cborValue.majorType == 4, "WitnetDecoderLib: Tried to read `string[]` from a `Witnet.CBOR` with majorType != 4"); uint64 length = readLength(_cborValue.buffer, _cborValue.additionalInformation); require(length < _UINT64_MAX, "WitnetDecoderLib: Indefinite-length CBOR arrays are not supported"); string[] memory array = new string[](length); for (uint64 i = 0; i < length; i++) { Witnet.CBOR memory item = valueFromBuffer(_cborValue.buffer); array[i] = decodeString(item); } return array; } /// @notice Decode a `Witnet.CBOR` structure into a native `uint64` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `uint64` value. function decodeUint64(Witnet.CBOR memory _cborValue) public pure returns(uint64) { require(_cborValue.majorType == 0, "WitnetDecoderLib: Tried to read `uint64` from a `Witnet.CBOR` with majorType != 0"); return readLength(_cborValue.buffer, _cborValue.additionalInformation); } /// @notice Decode a `Witnet.CBOR` structure into a native `uint64[]` value. /// @param _cborValue An instance of `Witnet.CBOR`. /// @return The value represented by the input, as an `uint64[]` value. function decodeUint64Array(Witnet.CBOR memory _cborValue) external pure returns(uint64[] memory) { require(_cborValue.majorType == 4, "WitnetDecoderLib: Tried to read `uint64[]` from a `Witnet.CBOR` with majorType != 4"); uint64 length = readLength(_cborValue.buffer, _cborValue.additionalInformation); require(length < _UINT64_MAX, "WitnetDecoderLib: Indefinite-length CBOR arrays are not supported"); uint64[] memory array = new uint64[](length); for (uint64 i = 0; i < length; i++) { Witnet.CBOR memory item = valueFromBuffer(_cborValue.buffer); array[i] = decodeUint64(item); } return array; } /// @notice Decode a Witnet.CBOR structure from raw bytes. /// @dev This is the main factory for Witnet.CBOR instances, which can be later decoded into native EVM types. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.CBOR` instance containing a partially decoded value. function valueFromBytes(bytes memory _cborBytes) external pure returns(Witnet.CBOR memory) { Witnet.Buffer memory buffer = Witnet.Buffer(_cborBytes, 0); return valueFromBuffer(buffer); } /// @notice Decode a Witnet.CBOR structure from raw bytes. /// @dev This is an alternate factory for Witnet.CBOR instances, which can be later decoded into native EVM types. /// @param _buffer A Buffer structure representing a CBOR-encoded value. /// @return A `Witnet.CBOR` instance containing a partially decoded value. function valueFromBuffer(Witnet.Buffer memory _buffer) public pure returns(Witnet.CBOR memory) { require(_buffer.data.length > 0, "WitnetDecoderLib: Found empty buffer when parsing CBOR value"); uint8 initialByte; uint8 majorType = 255; uint8 additionalInformation; uint64 tag = _UINT64_MAX; bool isTagged = true; while (isTagged) { // Extract basic CBOR properties from input bytes initialByte = _buffer.readUint8(); majorType = initialByte >> 5; additionalInformation = initialByte & 0x1f; // Early CBOR tag parsing. if (majorType == 6) { tag = readLength(_buffer, additionalInformation); } else { isTagged = false; } } require(majorType <= 7, "WitnetDecoderLib: Invalid CBOR major type"); return Witnet.CBOR( _buffer, initialByte, majorType, additionalInformation, 0, tag); } /// Reads the length of the next CBOR item from a buffer, consuming a different number of bytes depending on the /// value of the `additionalInformation` argument. function readLength(Witnet.Buffer memory _buffer, uint8 additionalInformation) private pure returns(uint64) { if (additionalInformation < 24) { return additionalInformation; } if (additionalInformation == 24) { return _buffer.readUint8(); } if (additionalInformation == 25) { return _buffer.readUint16(); } if (additionalInformation == 26) { return _buffer.readUint32(); } if (additionalInformation == 27) { return _buffer.readUint64(); } if (additionalInformation == 31) { return _UINT64_MAX; } revert("WitnetDecoderLib: Invalid length encoding (non-existent additionalInformation value)"); } /// Read the length of a CBOR indifinite-length item (arrays, maps, byte strings and text) from a buffer, consuming /// as many bytes as specified by the first byte. function readIndefiniteStringLength(Witnet.Buffer memory _buffer, uint8 majorType) private pure returns(uint64) { uint8 initialByte = _buffer.readUint8(); if (initialByte == 0xff) { return _UINT64_MAX; } uint64 length = readLength(_buffer, initialByte & 0x1f); require(length < _UINT64_MAX && (initialByte >> 5) == majorType, "WitnetDecoderLib: Invalid indefinite length"); return length; } /// Read a text string of a given length from a buffer. Returns a `bytes memory` value for the sake of genericness, /// but it can be easily casted into a string with `string(result)`. // solium-disable-next-line security/no-assign-params function readText(Witnet.Buffer memory _buffer, uint64 _length) private pure returns(bytes memory) { bytes memory result; for (uint64 index = 0; index < _length; index++) { uint8 value = _buffer.readUint8(); if (value & 0x80 != 0) { if (value < 0xe0) { value = (value & 0x1f) << 6 | (_buffer.readUint8() & 0x3f); _length -= 1; } else if (value < 0xf0) { value = (value & 0x0f) << 12 | (_buffer.readUint8() & 0x3f) << 6 | (_buffer.readUint8() & 0x3f); _length -= 2; } else { value = (value & 0x0f) << 18 | (_buffer.readUint8() & 0x3f) << 12 | (_buffer.readUint8() & 0x3f) << 6 | (_buffer.readUint8() & 0x3f); _length -= 3; } } result = abi.encodePacked(result, value); } return result; } }
[{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeBool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeBytes32","outputs":[{"internalType":"bytes32","name":"_bytes32","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeFixed16","outputs":[{"internalType":"int32","name":"","type":"int32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeFixed16Array","outputs":[{"internalType":"int32[]","name":"","type":"int32[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeInt128","outputs":[{"internalType":"int128","name":"","type":"int128"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeInt128Array","outputs":[{"internalType":"int128[]","name":"","type":"int128[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeUint64","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"_cborValue","type":"tuple"}],"name":"decodeUint64Array","outputs":[{"internalType":"uint64[]","name":"","type":"uint64[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"_buffer","type":"tuple"}],"name":"valueFromBuffer","outputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"_cborBytes","type":"bytes"}],"name":"valueFromBytes","outputs":[{"components":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint32","name":"cursor","type":"uint32"}],"internalType":"struct Witnet.Buffer","name":"buffer","type":"tuple"},{"internalType":"uint8","name":"initialByte","type":"uint8"},{"internalType":"uint8","name":"majorType","type":"uint8"},{"internalType":"uint8","name":"additionalInformation","type":"uint8"},{"internalType":"uint64","name":"len","type":"uint64"},{"internalType":"uint64","name":"tag","type":"uint64"}],"internalType":"struct Witnet.CBOR","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
6123dd61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100d95760003560e01c806394863ea411610096578063c5e88ff211610070578063c5e88ff21461021e578063dfca5d341461023e578063e67c5bd114610251578063f8a597d31461026457600080fd5b806394863ea4146101b55780639eee60ca146101db578063bb6ef6cf146101fe57600080fd5b806308c05c33146100de5780633380d81614610104578063531f4ba7146101245780637a8acab1146101445780637f3fb7ca1461016f5780638138799a1461018f575b600080fd5b6100f16100ec366004611a50565b610284565b6040519081526020015b60405180910390f35b610117610112366004611a50565b610301565b6040516100fb9190611b11565b610137610132366004611a50565b610442565b6040516100fb9190611b58565b610157610152366004611a50565b610572565b6040516001600160401b0390911681526020016100fb565b61018261017d366004611b93565b610611565b6040516100fb9190611c23565b6101a261019d366004611a50565b61078a565b60405160039190910b81526020016100fb565b6101c86101c3366004611a50565b6108b0565b604051600f9190910b81526020016100fb565b6101ee6101e9366004611a50565b61099a565b60405190151581526020016100fb565b61021161020c366004611a50565b610b10565b6040516100fb9190611cc0565b61023161022c366004611a50565b610bff565b6040516100fb9190611cd3565b61018261024c366004611d35565b610d90565b61021161025f366004611a50565b610db5565b610277610272366004611a50565b610e6e565b6040516100fb9190611d69565b60008061029083610b10565b9050600060208251116102a45781516102a7565b60205b905060005b818110156102f9576102bf816008611dc0565b8382815181106102d1576102d1611ddf565b01602001516001600160f81b031916901c9390931792806102f181611df5565b9150506102ac565b505050919050565b6060816040015160ff166004146103335760405162461bcd60e51b815260040161032a90611e10565b60405180910390fd5b600061034783600001518460600151611001565b90506001600160401b03808216106103715760405162461bcd60e51b815260040161032a90611e77565b6000816001600160401b03166001600160401b03811115610394576103946118dd565b6040519080825280602002602001820160405280156103bd578160200160208202803683370190505b50905060005b826001600160401b0316816001600160401b0316101561043a5760006103ec8660000151610611565b90506103f7816108b0565b83836001600160401b03168151811061041257610412611ddf565b6020026020010190600f0b9081600f0b8152505050808061043290611ede565b9150506103c3565b509392505050565b6060816040015160ff1660041461046b5760405162461bcd60e51b815260040161032a90611e10565b600061047f83600001518460600151611001565b90506001600160401b03808216106104a95760405162461bcd60e51b815260040161032a90611e77565b6000816001600160401b03166001600160401b038111156104cc576104cc6118dd565b6040519080825280602002602001820160405280156104f5578160200160208202803683370190505b50905060005b826001600160401b0316816001600160401b0316101561043a5760006105248660000151610611565b905061052f8161078a565b83836001600160401b03168151811061054a5761054a611ddf565b602002602001019060030b908160030b8152505050808061056a90611ede565b9150506104fb565b6000816040015160ff166000146105f95760405162461bcd60e51b8152602060048201526051602482015260008051602061238883398151915260448201527f6075696e743634602066726f6d206120605769746e65742e43424f526020776960648201527007468206d616a6f725479706520213d203607c1b608482015260a40161032a565b61060b82600001518360600151611001565b92915050565b610619611896565b81515161068e5760405162461bcd60e51b815260206004820152603c60248201527f5769746e65744465636f6465724c69623a20466f756e6420656d70747920627560448201527f66666572207768656e2070617273696e672043424f522076616c756500000000606482015260840161032a565b600060ff816001600160401b0360015b80156106e1576106ad8761113b565b94506007600586901c169350601f8516925060068414156106d9576106d28784611001565b915061069e565b50600061069e565b60078460ff1611156107475760405162461bcd60e51b815260206004820152602960248201527f5769746e65744465636f6465724c69623a20496e76616c69642043424f52206d604482015268616a6f72207479706560b81b606482015260840161032a565b506040805160c08101825296875260ff9485166020880152928416928601929092529091166060840152600060808401526001600160401b031660a08301525090565b6000816040015160ff166007146108145760405162461bcd60e51b8152602060048201526054602482015260008051602061238883398151915260448201527f6120606669786564602076616c75652066726f6d2061206057542e43424f52606064820152732077697468206d616a6f725479706520213d203760601b608482015260a40161032a565b816060015160ff166019146108a55760405162461bcd60e51b815260206004820152605b602482015260008051602061238883398151915260448201527f6066697865643136602066726f6d2061206057542e43424f526020776974682060648201527f6164646974696f6e616c496e666f726d6174696f6e20213d2032350000000000608482015260a40161032a565b815161060b9061119c565b6000816040015160ff16600114156108f45760006108d683600001518460600151611001565b90506108ed6001600160401b038216600019611f05565b9392505050565b604082015160ff166109185761090982610572565b6001600160401b031692915050565b60405162461bcd60e51b8152602060048201526057602482015260008051602061238883398151915260448201527f60696e74313238602066726f6d206120605769746e65742e43424f526020776960648201527f7468206d616a6f7254797065206e6f742030206f722031000000000000000000608482015260a40161032a565b60006109ae82600001518360600151611001565b6001600160401b03166080830152604082015160ff16600714610a4d5760405162461bcd60e51b8152602060048201526057602482015260008051602061238883398151915260448201527f612060626f6f6c602076616c75652066726f6d206120605769746e65742e434260648201527f4f52602077697468206d616a6f725479706520213d2037000000000000000000608482015260a40161032a565b81608001516001600160401b031660141415610a6b57506000919050565b81608001516001600160401b031660151415610a8957506001919050565b60405162461bcd60e51b815260206004820152605c602482015260008051602061238883398151915260448201527f60626f6f6c602066726f6d206120605769746e65742e43424f5260207769746860648201527f206c656e20646966666572656e74207468616e203230206f7220323100000000608482015260a40161032a565b919050565b6060610b2482600001518360600151611001565b6001600160401b03166080830181905263ffffffff1415610bef5760606000610b5584600001518560400151611280565b905063ffffffff8082161015610be85783518290610b739083611344565b604051602001610b84929190611f55565b6040516020818303038152906040529150610ba784600001518560400151611280565b905063ffffffff8082161015610be85783518290610bc59083611344565b604051602001610bd6929190611f55565b60405160208183030381529060405291505b5092915050565b6080820151825161060b91611344565b6060816040015160ff16600414610c885760405162461bcd60e51b8152602060048201526053602482015260008051602061238883398151915260448201527f60737472696e675b5d602066726f6d206120605769746e65742e43424f5260206064820152721dda5d1a081b585a9bdc951e5c1948084f480d606a1b608482015260a40161032a565b6000610c9c83600001518460600151611001565b90506001600160401b0380821610610cc65760405162461bcd60e51b815260040161032a90611e77565b6000816001600160401b03166001600160401b03811115610ce957610ce96118dd565b604051908082528060200260200182016040528015610d1c57816020015b6060815260200190600190039081610d075790505b50905060005b826001600160401b0316816001600160401b0316101561043a576000610d4b8660000151610611565b9050610d5681610db5565b83836001600160401b031681518110610d7157610d71611ddf565b6020026020010181905250508080610d8890611ede565b915050610d22565b610d98611896565b60408051808201909152828152600060208201526108ed81610611565b6060610dc982600001518360600151611001565b6001600160401b03908116608084018190521415610e5c57606060005b80610be8576000610dff85600001518660400151611280565b90506001600160401b038082161015610e515784518390610e2a90610e25600485611f9a565b611461565b604051602001610e3b929190611f55565b6040516020818303038152906040529250610e56565b600191505b50610de6565b61060b82600001518360800151611461565b6060816040015160ff16600414610ef75760405162461bcd60e51b8152602060048201526053602482015260008051602061238883398151915260448201527f6075696e7436345b5d602066726f6d206120605769746e65742e43424f5260206064820152721dda5d1a081b585a9bdc951e5c1948084f480d606a1b608482015260a40161032a565b6000610f0b83600001518460600151611001565b90506001600160401b0380821610610f355760405162461bcd60e51b815260040161032a90611e77565b6000816001600160401b03166001600160401b03811115610f5857610f586118dd565b604051908082528060200260200182016040528015610f81578160200160208202803683370190505b50905060005b826001600160401b0316816001600160401b0316101561043a576000610fb08660000151610611565b9050610fbb81610572565b83836001600160401b031681518110610fd657610fd6611ddf565b6001600160401b03909216602092830291909101909101525080610ff981611ede565b915050610f87565b600060188260ff161015611019575060ff811661060b565b8160ff16601814156110385761102e8361113b565b60ff16905061060b565b8160ff16601914156110585761104d8361159f565b61ffff16905061060b565b8160ff16601a141561107a5761106d836115f6565b63ffffffff16905061060b565b8160ff16601b14156110965761108f8361164d565b905061060b565b8160ff16601f14156110b057506001600160401b0361060b565b60405162461bcd60e51b815260206004820152605460248201527f5769746e65744465636f6465724c69623a20496e76616c6964206c656e67746860448201527f20656e636f64696e6720286e6f6e2d6578697374656e74206164646974696f6e606482015273616c496e666f726d6174696f6e2076616c75652960601b608482015260a40161032a565b60008160200151826000015151808263ffffffff161061116d5760405162461bcd60e51b815260040161032a90611fc0565b835160208501805180830160010151909182906111898261202f565b63ffffffff169052509695505050505050565b6000806111a88361159f565b61ffff811691506180008116906000906111ce90600f90617c001660030b600a1d612049565b90506103ff8316600f600383900b14156111e757610400175b6000808360030b1261122557600a8260030b610400178460030b6001901b6127106112129190612089565b61121c9190612089565b901d905061125b565b600a6112308461210e565b60030b6001901b8360030b6104001761271061124c9190612089565b6112569190612132565b901d90505b63ffffffff8416156112765761127360001982612160565b90505b9695505050505050565b60008061128c8461113b565b90508060ff1660ff14156112aa576001600160401b0391505061060b565b60006112b98583601f16611001565b90506001600160401b038082161080156112dc57506007600583901c1660ff8516145b61133c5760405162461bcd60e51b815260206004820152602b60248201527f5769746e65744465636f6465724c69623a20496e76616c696420696e6465666960448201526a0dcd2e8ca40d8cadccee8d60ab1b606482015260840161032a565b949350505050565b606082600001515182846020015161135c91906121ef565b63ffffffff1611156113ce5760405162461bcd60e51b815260206004820152603560248201527f5769746e65744275666665723a204e6f7420656e6f75676820627974657320696044820152746e20627566666572207768656e2072656164696e6760581b606482015260840161032a565b60008263ffffffff166001600160401b038111156113ee576113ee6118dd565b6040519080825280601f01601f191660200182016040528015611418576020820181803683370190505b50905063ffffffff8316156108ed578351602080860151908183018101908401611449818363ffffffff8a166116a4565b61145588886001611774565b50505050509392505050565b60608060005b836001600160401b0316816001600160401b0316101561043a57600061148c8661113b565b905060808116156115675760e08160ff1610156114d1576114ac8661113b565b603f16600682601f1660ff16901b1790506001856114ca919061220e565b9450611567565b60f08160ff161015611518576114e68661113b565b603f1660066114f48861113b565b603f1660ff16901b600c83600f1660ff16901b171790506002856114ca919061220e565b6115218661113b565b603f16600661152f8861113b565b603f16901b600c61153f8961113b565b603f1660ff16901b601284600f1660ff16901b1717179050600385611564919061220e565b94505b828160405160200161157a929190612236565b604051602081830303815290604052925050808061159790611ede565b915050611467565b6000816020015160016115b291906121ef565b82515163ffffffff821681116115da5760405162461bcd60e51b815260040161032a90611fc0565b83516020850180516002818401810151919261118982856121ef565b60008160200151600361160991906121ef565b82515163ffffffff821681116116315760405162461bcd60e51b815260040161032a90611fc0565b83516020850180516004818401810151919261118982856121ef565b60008160200151600761166091906121ef565b82515163ffffffff821681116116885760405162461bcd60e51b815260040161032a90611fc0565b83516020850180516008818401810151919261118982856121ef565b600081116116fe5760405162461bcd60e51b815260206004820152602160248201527f5769746e65744275666665723a2043616e6e6f7420636f7079203020627974656044820152607360f81b606482015260840161032a565b602081106117365781518352611715602084612268565b9250611722602083612268565b915061172f602082612280565b90506116fe565b801561176f576000600161174b836020612280565b6117579061010061237b565b6117619190612280565b835185518216911916178452505b505050565b6000811561180c578263ffffffff1684602001518461179391906121ef565b63ffffffff16116117fa5760405162461bcd60e51b815260206004820152602b60248201527f5769746e65744275666665723a20496e7465676572206f766572666c6f77207760448201526a68656e207365656b696e6760a81b606482015260840161032a565b602084015161180990846121ef565b92505b83515163ffffffff841611156118825760405162461bcd60e51b815260206004820152603560248201527f5769746e65744275666665723a204e6f7420656e6f75676820627974657320696044820152746e20627566666572207768656e207365656b696e6760581b606482015260840161032a565b505063ffffffff1660209190910181905290565b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611915576119156118dd565b60405290565b600082601f83011261192c57600080fd5b81356001600160401b0380821115611946576119466118dd565b604051601f8301601f19908116603f0116810190828211818310171561196e5761196e6118dd565b8160405283815286602085880101111561198757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082840312156119b957600080fd5b604051604081016001600160401b0382821081831117156119dc576119dc6118dd565b8160405282935084359150808211156119f457600080fd5b50611a018582860161191b565b825250602083013563ffffffff81168114611a1b57600080fd5b6020919091015292915050565b803560ff81168114610b0b57600080fd5b80356001600160401b0381168114610b0b57600080fd5b600060208284031215611a6257600080fd5b81356001600160401b0380821115611a7957600080fd5b9083019060c08286031215611a8d57600080fd5b611a956118f3565b823582811115611aa457600080fd5b611ab0878286016119a7565b825250611abf60208401611a28565b6020820152611ad060408401611a28565b6040820152611ae160608401611a28565b6060820152611af260808401611a39565b6080820152611b0360a08401611a39565b60a082015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015611b4c578351600f0b83529284019291840191600101611b2d565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015611b4c57835160030b83529284019291840191600101611b74565b600060208284031215611ba557600080fd5b81356001600160401b03811115611bbb57600080fd5b61133c848285016119a7565b60005b83811015611be2578181015183820152602001611bca565b83811115611bf1576000848401525b50505050565b60008151808452611c0f816020860160208601611bc7565b601f01601f19169290920160200192915050565b602081526000825160c060208401528051604060e0850152611c49610120850182611bf7565b905063ffffffff60208301511661010085015260ff602086015116604085015260408501519150611c7f606085018360ff169052565b606085015160ff81166080860152915060808501516001600160401b03811660a0860152915060a08501516001600160401b03811660c0860152915061133c565b6020815260006108ed6020830184611bf7565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611d2857603f19888603018452611d16858351611bf7565b94509285019290850190600101611cfa565b5092979650505050505050565b600060208284031215611d4757600080fd5b81356001600160401b03811115611d5d57600080fd5b61133c8482850161191b565b6020808252825182820181905260009190848201906040850190845b81811015611b4c5783516001600160401b031683529284019291840191600101611d85565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611dda57611dda611daa565b500290565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611e0957611e09611daa565b5060010190565b602080825260539082015260008051602061238883398151915260408201527f60696e743132385b5d602066726f6d206120605769746e65742e43424f5260206060820152721dda5d1a081b585a9bdc951e5c1948084f480d606a1b608082015260a00190565b60208082526041908201527f5769746e65744465636f6465724c69623a20496e646566696e6974652d6c656e60408201527f6774682043424f522061727261797320617265206e6f7420737570706f7274656060820152601960fa1b608082015260a00190565b60006001600160401b0380831681811415611efb57611efb611daa565b6001019392505050565b600081600f0b83600f0b600081128160016001607f1b031901831281151615611f3057611f30611daa565b8160016001607f1b03018313811615611f4b57611f4b611daa565b5090039392505050565b60008351611f67818460208801611bc7565b835190830190611f7b818360208801611bc7565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680611fb457611fb4611f84565b92169190910492915050565b60208082526049908201527f5769746e65744275666665723a20547269656420746f20726561642066726f6d60408201527f206120636f6e73756d65642042756666657220286d75737420726577696e642060608201526869742066697273742960b81b608082015260a00190565b600063ffffffff80831681811415611efb57611efb611daa565b60008160030b8360030b6000811281637fffffff190183128115161561207157612071611daa565b81637fffffff018313811615611f4b57611f4b611daa565b60006001600160ff1b03818413828413808216868404861116156120af576120af611daa565b600160ff1b60008712828116878305891216156120ce576120ce611daa565b600087129250878205871284841616156120ea576120ea611daa565b8785058712818416161561210057612100611daa565b505050929093029392505050565b60008160030b637fffffff1981141561212957612129611daa565b60000392915050565b60008261214157612141611f84565b600160ff1b82146000198414161561215b5761215b611daa565b500590565b60008160030b8360030b637fffffff60008213600084138383048511828216161561218d5761218d611daa565b637fffffff1960008512828116878305871216156121ad576121ad611daa565b600087129250858205871284841616156121c9576121c9611daa565b858505871281841616156121df576121df611daa565b5050509290910295945050505050565b600063ffffffff808316818516808303821115611f7b57611f7b611daa565b60006001600160401b038381169083168181101561222e5761222e611daa565b039392505050565b60008351612248818460208801611bc7565b60f89390931b6001600160f81b0319169190920190815260010192915050565b6000821982111561227b5761227b611daa565b500190565b60008282101561229257612292611daa565b500390565b600181815b808511156122d25781600019048211156122b8576122b8611daa565b808516156122c557918102915b93841c939080029061229c565b509250929050565b6000826122e95750600161060b565b816122f65750600061060b565b816001811461230c576002811461231657612332565b600191505061060b565b60ff84111561232757612327611daa565b50506001821b61060b565b5060208310610133831016604e8410600b8410161715612355575081810a61060b565b61235f8383612297565b806000190482111561237357612373611daa565b029392505050565b60006108ed83836122da56fe5769746e65744465636f6465724c69623a20547269656420746f207265616420a26469706673582212201b4dc73b2c84f723f8f00ded24b6c9ea39b015ab71baa65ccbb2d5eac48b4ee164736f6c634300080b0033
Deployed ByteCode Sourcemap
23842:13941:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26149:307;;;;;;:::i;:::-;;:::i;:::-;;;3257:25:1;;;3245:2;3230:18;26149:307:0;;;;;;;;29473:655;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27734:654::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32132:290::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4885:31:1;;;4867:50;;4855:2;4840:18;32132:290:0;4715:208:1;34164:957:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;27022:410::-;;;;;;:::i;:::-;;:::i;:::-;;;7144:1:1;7133:21;;;;7115:40;;7103:2;7088:18;27022:410:0;6965:196:1;28600:657:0;;;;;;:::i;:::-;;:::i;:::-;;;7347:2:1;7336:22;;;;7318:41;;7306:2;7291:18;28600:657:0;7166:199:1;24240:548:0;;;;;;:::i;:::-;;:::i;:::-;;;7543:14:1;;7536:22;7518:41;;7506:2;7491:18;24240:548:0;7370:195:1;25000:927:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;31265:655::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33623:201::-;;;;;;:::i;:::-;;:::i;30339:710::-;;;;;;:::i;:::-;;:::i;32638:655::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26149:307::-;26223:16;26248;26267:23;26279:10;26267:11;:23::i;:::-;26248:42;;26297:9;26322:2;26309:3;:10;:15;:33;;26332:3;:10;26309:33;;;26327:2;26309:33;26297:45;;26354:7;26349:102;26372:4;26367:2;:9;26349:102;;;26436:6;:2;26441:1;26436:6;:::i;:::-;26416:3;26420:2;26416:7;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;26416:7:0;26408:35;;26396:47;;;;;26378:5;;;;:::i;:::-;;;;26349:102;;;;26241:215;;26149:307;;;:::o;29473:655::-;29553:15;29585:10;:20;;;:25;;29609:1;29585:25;29577:121;;;;-1:-1:-1;;;29577:121:0;;;;;;;:::i;:::-;;;;;;;;;29707:13;29723:63;29734:10;:17;;;29753:10;:32;;;29723:10;:63::i;:::-;29707:79;-1:-1:-1;;;;;;29801:20:0;;;;29793:98;;;;-1:-1:-1;;;29793:98:0;;;;;;;:::i;:::-;29900:21;29937:6;-1:-1:-1;;;;;29924:20:0;-1:-1:-1;;;;;29924:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29924:20:0;;29900:44;;29956:8;29951:151;29974:6;-1:-1:-1;;;;;29970:10:0;:1;-1:-1:-1;;;;;29970:10:0;;29951:151;;;29996:23;30022:34;30038:10;:17;;;30022:15;:34::i;:::-;29996:60;;30076:18;30089:4;30076:12;:18::i;:::-;30065:5;30071:1;-1:-1:-1;;;;;30065:8:0;;;;;;;;;:::i;:::-;;;;;;:29;;;;;;;;;;;29987:115;29982:3;;;;;:::i;:::-;;;;29951:151;;;-1:-1:-1;30117:5:0;29473:655;-1:-1:-1;;;29473:655:0:o;27734:654::-;27815:14;27846:10;:20;;;:25;;27870:1;27846:25;27838:121;;;;-1:-1:-1;;;27838:121:0;;;;;;;:::i;:::-;27968:13;27984:63;27995:10;:17;;;28014:10;:32;;;27984:10;:63::i;:::-;27968:79;-1:-1:-1;;;;;;28062:20:0;;;;28054:98;;;;-1:-1:-1;;;28054:98:0;;;;;;;:::i;:::-;28161:20;28196:6;-1:-1:-1;;;;;28184:19:0;-1:-1:-1;;;;;28184:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28184:19:0;;28161:42;;28215:8;28210:152;28233:6;-1:-1:-1;;;;;28229:10:0;:1;-1:-1:-1;;;;;28229:10:0;;28210:152;;;28255:23;28281:34;28297:10;:17;;;28281:15;:34::i;:::-;28255:60;;28335:19;28349:4;28335:13;:19::i;:::-;28324:5;28330:1;-1:-1:-1;;;;;28324:8:0;;;;;;;;;:::i;:::-;;;;;;:30;;;;;;;;;;;28246:116;28241:3;;;;;:::i;:::-;;;;28210:152;;32132:290;32205:6;32228:10;:20;;;:25;;32252:1;32228:25;32220:119;;;;-1:-1:-1;;;32220:119:0;;11799:2:1;32220:119:0;;;11781:21:1;11838:2;11818:18;;;11811:30;-1:-1:-1;;;;;;;;;;;11857:18:1;;;11850:62;11948:34;11928:18;;;11921:62;-1:-1:-1;;;11999:19:1;;;11992:48;12057:19;;32220:119:0;11597:485:1;32220:119:0;32353:63;32364:10;:17;;;32383:10;:32;;;32353:10;:63::i;:::-;32346:70;32132:290;-1:-1:-1;;32132:290:0:o;34164:957::-;34239:18;;:::i;:::-;34274:12;;:19;34266:96;;;;-1:-1:-1;;;34266:96:0;;12289:2:1;34266:96:0;;;12271:21:1;12328:2;12308:18;;;12301:30;12367:34;12347:18;;;12340:62;12438:30;12418:18;;;12411:58;12486:19;;34266:96:0;12087:424:1;34266:96:0;34371:17;34413:3;34371:17;-1:-1:-1;;;;;34506:4:0;34517:388;34524:8;34517:388;;;34614:19;:7;:17;:19::i;:::-;34600:33;-1:-1:-1;34654:16:0;34669:1;34654:16;;;;;-1:-1:-1;34717:4:0;34703:18;;;-1:-1:-1;34783:1:0;34770:14;;34766:132;;;34803:42;34814:7;34823:21;34803:10;:42::i;:::-;34797:48;;34517:388;;34766:132;-1:-1:-1;34883:5:0;34517:388;;;34934:1;34921:9;:14;;;;34913:68;;;;-1:-1:-1;;;34913:68:0;;12718:2:1;34913:68:0;;;12700:21:1;12757:2;12737:18;;;12730:30;12796:34;12776:18;;;12769:62;-1:-1:-1;;;12847:18:1;;;12840:39;12896:19;;34913:68:0;12516:405:1;34913:68:0;-1:-1:-1;34997:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34997:118:0;;;;-1:-1:-1;;;;;34997:118:0;;;;;-1:-1:-1;34997:118:0;34164:957::o;27022:410::-;27096:5;27118:10;:20;;;:25;;27142:1;27118:25;27110:122;;;;-1:-1:-1;;;27110:122:0;;13128:2:1;27110:122:0;;;13110:21:1;13167:2;13147:18;;;13140:30;-1:-1:-1;;;;;;;;;;;13186:18:1;;;13179:62;13277:34;13257:18;;;13250:62;-1:-1:-1;;;13328:19:1;;;13321:51;13389:19;;27110:122:0;12926:488:1;27110:122:0;27247:10;:32;;;:38;;27283:2;27247:38;27239:142;;;;-1:-1:-1;;;27239:142:0;;13621:2:1;27239:142:0;;;13603:21:1;13660:2;13640:18;;;13633:30;-1:-1:-1;;;;;;;;;;;13679:18:1;;;13672:62;13770:34;13750:18;;;13743:62;13842:29;13821:19;;;13814:58;13889:19;;27239:142:0;13419:495:1;27239:142:0;27395:17;;:31;;:29;:31::i;28600:657::-;28673:6;28692:10;:20;;;:25;;28716:1;28692:25;28688:460;;;28728:13;28744:63;28755:10;:17;;;28774:10;:32;;;28744:10;:63::i;:::-;28728:79;-1:-1:-1;28823:36:0;-1:-1:-1;;;;;28843:15:0;;-1:-1:-1;;28823:36:0;:::i;:::-;28816:43;28600:657;-1:-1:-1;;;28600:657:0:o;28688:460::-;28877:20;;;;:25;;28873:275;;29114:24;29127:10;29114:12;:24::i;:::-;-1:-1:-1;;;;;29106:33:0;;28600:657;-1:-1:-1;;28600:657:0:o;28873:275::-;29154:97;;-1:-1:-1;;;29154:97:0;;14524:2:1;29154:97:0;;;14506:21:1;14563:2;14543:18;;;14536:30;-1:-1:-1;;;;;;;;;;;14582:18:1;;;14575:62;14673:34;14653:18;;;14646:62;14745:25;14724:19;;;14717:54;14788:19;;29154:97:0;14322:491:1;24240:548:0;24311:4;24341:63;24352:10;:17;;;24371:10;:32;;;24341:10;:63::i;:::-;-1:-1:-1;;;;;24324:80:0;:14;;;:80;24419:20;;;;:25;;24443:1;24419:25;24411:125;;;;-1:-1:-1;;;24411:125:0;;15020:2:1;24411:125:0;;;15002:21:1;15059:2;15039:18;;;15032:30;-1:-1:-1;;;;;;;;;;;15078:18:1;;;15071:62;15169:34;15149:18;;;15142:62;15241:25;15220:19;;;15213:54;15284:19;;24411:125:0;14818:491:1;24411:125:0;24547:10;:14;;;-1:-1:-1;;;;;24547:20:0;24565:2;24547:20;24543:240;;;-1:-1:-1;24585:5:0;;24240:548;-1:-1:-1;24240:548:0:o;24543:240::-;24608:10;:14;;;-1:-1:-1;;;;;24608:20:0;24626:2;24608:20;24604:179;;;-1:-1:-1;24646:4:0;;24240:548;-1:-1:-1;24240:548:0:o;24604:179::-;24673:102;;-1:-1:-1;;;24673:102:0;;15516:2:1;24673:102:0;;;15498:21:1;15555:2;15535:18;;;15528:30;-1:-1:-1;;;;;;;;;;;15574:18:1;;;15567:62;15665:34;15645:18;;;15638:62;15737:30;15716:19;;;15709:59;15785:19;;24673:102:0;15314:496:1;24604:179:0;24240:548;;;:::o;25000:927::-;25072:12;25110:63;25121:10;:17;;;25140:10;:32;;;25110:10;:63::i;:::-;-1:-1:-1;;;;;25093:80:0;:14;;;:80;;;23956:16;25184:29;25180:742;;;25224:22;25345:17;25372:67;25399:10;:17;;;25418:10;:20;;;25372:26;:67::i;:::-;25345:95;-1:-1:-1;23956:16:0;25453:24;;;;25449:365;;;25530:17;;25519:9;;25530:34;;25553:10;25530:22;:34::i;:::-;25502:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25490:75;;25596:67;25623:10;:17;;;25642:10;:20;;;25596:26;:67::i;:::-;25576:88;-1:-1:-1;23956:16:0;25679:24;;;;25675:130;;;25758:17;;25747:9;;25758:34;;25781:10;25758:22;:34::i;:::-;25730:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25718:75;;25675:130;-1:-1:-1;25829:9:0;25000:927;-1:-1:-1;;25000:927:0:o;25180:742::-;25898:14;;;;25868:17;;:46;;:22;:46::i;31265:655::-;31345:15;31377:10;:20;;;:25;;31401:1;31377:25;31369:121;;;;-1:-1:-1;;;31369:121:0;;16488:2:1;31369:121:0;;;16470:21:1;16527:2;16507:18;;;16500:30;-1:-1:-1;;;;;;;;;;;16546:18:1;;;16539:62;16637:34;16617:18;;;16610:62;-1:-1:-1;;;16688:19:1;;;16681:50;16748:19;;31369:121:0;16286:487:1;31369:121:0;31499:13;31515:63;31526:10;:17;;;31545:10;:32;;;31515:10;:63::i;:::-;31499:79;-1:-1:-1;;;;;;31593:20:0;;;;31585:98;;;;-1:-1:-1;;;31585:98:0;;;;;;;:::i;:::-;31692:21;31729:6;-1:-1:-1;;;;;31716:20:0;-1:-1:-1;;;;;31716:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31692:44;;31748:8;31743:151;31766:6;-1:-1:-1;;;;;31762:10:0;:1;-1:-1:-1;;;;;31762:10:0;;31743:151;;;31788:23;31814:34;31830:10;:17;;;31814:15;:34::i;:::-;31788:60;;31868:18;31881:4;31868:12;:18::i;:::-;31857:5;31863:1;-1:-1:-1;;;;;31857:8:0;;;;;;;;;:::i;:::-;;;;;;:29;;;;31779:115;31774:3;;;;;:::i;:::-;;;;31743:151;;33623:201;33694:18;;:::i;:::-;33751:28;;;;;;;;;;;;33721:27;33751:28;;;;33795:23;33751:28;33795:15;:23::i;30339:710::-;30412:13;30451:63;30462:10;:17;;;30481:10;:32;;;30451:10;:63::i;:::-;-1:-1:-1;;;;;30434:80:0;;;:14;;;:80;;;30525:29;30521:523;;;30565:21;30595:9;30613:311;30621:4;30613:311;;30638:17;30658:67;30685:10;:17;;;30704:10;:20;;;30658:26;:67::i;:::-;30638:87;-1:-1:-1;;;;;;30740:24:0;;;;30736:179;;;30826:17;;30807:8;;30817:43;;30845:14;30858:1;30845:10;:14;:::i;:::-;30817:8;:43::i;:::-;30790:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30779:82;;30736:179;;;30899:4;30892:11;;30736:179;30627:297;30613:311;;30521:523;30992:43;31001:10;:17;;;31020:10;:14;;;30992:8;:43::i;32638:655::-;32718:15;32750:10;:20;;;:25;;32774:1;32750:25;32742:121;;;;-1:-1:-1;;;32742:121:0;;17316:2:1;32742:121:0;;;17298:21:1;17355:2;17335:18;;;17328:30;-1:-1:-1;;;;;;;;;;;17374:18:1;;;17367:62;17465:34;17445:18;;;17438:62;-1:-1:-1;;;17516:19:1;;;17509:50;17576:19;;32742:121:0;17114:487:1;32742:121:0;32872:13;32888:63;32899:10;:17;;;32918:10;:32;;;32888:10;:63::i;:::-;32872:79;-1:-1:-1;;;;;;32966:20:0;;;;32958:98;;;;-1:-1:-1;;;32958:98:0;;;;;;;:::i;:::-;33065:21;33102:6;-1:-1:-1;;;;;33089:20:0;-1:-1:-1;;;;;33089:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33089:20:0;;33065:44;;33121:8;33116:151;33139:6;-1:-1:-1;;;;;33135:10:0;:1;-1:-1:-1;;;;;33135:10:0;;33116:151;;;33161:23;33187:34;33203:10;:17;;;33187:15;:34::i;:::-;33161:60;;33241:18;33254:4;33241:12;:18::i;:::-;33230:5;33236:1;-1:-1:-1;;;;;33230:8:0;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33230:29:0;;;:8;;;;;;;;;;;:29;-1:-1:-1;33147:3:0;;;;:::i;:::-;;;;33116:151;;35297:703;35397:6;35440:2;35416:21;:26;;;35412:77;;;-1:-1:-1;35453:28:0;;;;;35412:77;35499:21;:27;;35524:2;35499:27;35495:76;;;35544:19;:7;:17;:19::i;:::-;35537:26;;;;;;35495:76;35581:21;:27;;35606:2;35581:27;35577:77;;;35626:20;:7;:18;:20::i;:::-;35619:27;;;;;;35577:77;35664:21;:27;;35689:2;35664:27;35660:77;;;35709:20;:7;:18;:20::i;:::-;35702:27;;;;;;35660:77;35747:21;:27;;35772:2;35747:27;35743:77;;;35792:20;:7;:18;:20::i;:::-;35785:27;;;;35743:77;35830:21;:27;;35855:2;35830:27;35826:68;;;-1:-1:-1;;;;;;35868:18:0;;35826:68;35900:94;;-1:-1:-1;;;35900:94:0;;17808:2:1;35900:94:0;;;17790:21:1;17847:2;17827:18;;;17820:30;17886:34;17866:18;;;17859:62;17957:34;17937:18;;;17930:62;-1:-1:-1;;;18008:19:1;;;18001:51;18069:19;;35900:94:0;17606:488:1;16692:359:0;16816:5;16770:7;:14;;;16786:7;:12;;;:19;12733:6;12725:5;:14;;;12717:100;;;;-1:-1:-1;;;12717:100:0;;;;;;;:::i;:::-;16856:12;;16891:14:::1;::::0;::::1;::::0;;16963:31;;;16983:1:::1;16963:31:::0;16957:38;16891:14;;;;17008:16:::1;16891:14:::0;17008:16:::1;:::i;:::-;;;::::0;;-1:-1:-1;17040:5:0;16692:359;-1:-1:-1;;;;;;16692:359:0:o;20902:1091::-;20976:5;20990:17;21010:19;21021:7;21010:10;:19::i;:::-;20990:39;;;;-1:-1:-1;21093:6:0;21080:19;;;21066:11;;21236:39;;21273:2;;21256:6;21243:19;21237:32;;21267:2;21237:32;21236:39;:::i;:::-;21219:56;-1:-1:-1;21346:6:0;21333:19;;21432:2;21420:14;;;;;21416:57;;;21460:5;21445:20;21416:57;21537:12;21576:1;21564:8;:13;;;21560:297;;21702:2;21675:11;21668:19;;21691:5;21660:36;21631:8;21624:16;;21611:1;:30;;21645:5;21604:46;;;;:::i;:::-;:93;;;;:::i;:::-;21603:101;;21588:117;;21560:297;;;21846:2;21828:10;21830:8;21828:10;:::i;:::-;21821:18;;21808:1;:32;;21767:11;21760:19;;21783:5;21752:36;21792:5;21745:52;;;;:::i;:::-;21744:97;;;;:::i;:::-;21743:105;;21728:121;;21560:297;21927:9;;;;21923:45;;21947:13;-1:-1:-1;;21947:13:0;;:::i;:::-;;;21923:45;21981:6;20902:1091;-1:-1:-1;;;;;;20902:1091:0:o;36178:430::-;36282:6;36297:17;36317:19;:7;:17;:19::i;:::-;36297:39;;36347:11;:19;;36362:4;36347:19;36343:60;;;-1:-1:-1;;;;;36377:18:0;;;;;36343:60;36409:13;36425:39;36436:7;36445:11;36459:4;36445:18;36425:10;:39::i;:::-;36409:55;-1:-1:-1;;;;;;36479:20:0;;;;:55;;;;-1:-1:-1;36504:16:0;36519:1;36504:16;;;;36503:31;;;;36479:55;36471:111;;;;-1:-1:-1;;;36471:111:0;;20941:2:1;36471:111:0;;;20923:21:1;20980:2;20960:18;;;20953:30;21019:34;20999:18;;;20992:62;-1:-1:-1;;;21070:18:1;;;21063:41;21121:19;;36471:111:0;20739:407:1;36471:111:0;36596:6;36178:430;-1:-1:-1;;;;36178:430:0:o;13161:1058::-;13244:12;13371:7;:12;;;:19;13360:7;13343;:14;;;:24;;;;:::i;:::-;:47;;;;13335:113;;;;-1:-1:-1;;;13335:113:0;;21586:2:1;13335:113:0;;;21568:21:1;21625:2;21605:18;;;21598:30;21664:34;21644:18;;;21637:62;-1:-1:-1;;;21715:18:1;;;21708:51;21776:19;;13335:113:0;21384:417:1;13335:113:0;13511:24;13548:7;13538:18;;-1:-1:-1;;;;;13538:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13538:18:0;-1:-1:-1;13511:45:0;-1:-1:-1;13621:12:0;;;;13617:572;;13666:12;;13703:14;;;;;;13878:28;;;;;;13938:20;;14033:56;13938:20;13878:28;14075:13;;;14033:6;:56::i;:::-;14153:28;14158:7;14167;14176:4;14153;:28::i;:::-;;13635:554;;;;14202:11;13161:1058;-1:-1:-1;;;13161:1058:0:o;36862:918::-;36947:12;36968:19;36999:12;36994:761;37025:7;-1:-1:-1;;;;;37017:15:0;:5;-1:-1:-1;;;;;37017:15:0;;36994:761;;;37052:11;37066:19;:7;:17;:19::i;:::-;37052:33;-1:-1:-1;37106:4:0;37098:12;;:17;37094:605;;37140:4;37132:5;:12;;;37128:562;;;37203:19;:7;:17;:19::i;:::-;37225:4;37203:26;37185:1;37168:5;37176:4;37168:12;37167:19;;;;:63;37159:71;;37254:1;37243:12;;;;;:::i;:::-;;;37128:562;;;37285:4;37277:5;:12;;;37273:417;;;37398:19;:7;:17;:19::i;:::-;37420:4;37398:26;37380:1;37349:19;:7;:17;:19::i;:::-;37371:4;37349:26;37348:33;;;;37330:2;37313:5;37321:4;37313:12;37312:20;;;;:69;:113;37304:121;;37449:1;37438:12;;;;;:::i;37273:417::-;37626:19;:7;:17;:19::i;:::-;37648:4;37626:26;37607:1;37576:19;:7;:17;:19::i;:::-;37598:4;37576:26;37575:33;;37557:2;37526:19;:7;:17;:19::i;:::-;37548:4;37526:26;37525:34;;;;37507:2;37490:5;37498:4;37490:12;37489:20;;;;:70;:119;:164;37481:172;;37677:1;37666:12;;;;;:::i;:::-;;;37273:417;37733:6;37741:5;37716:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37707:40;;37043:712;37034:7;;;;;:::i;:::-;;;;36994:761;;17295:369;17424:6;17374:7;:14;;;17391:1;17374:18;;;;:::i;:::-;17394:12;;:19;12725:14;;;;-1:-1:-1;12717:100:0;;;;-1:-1:-1;;;12717:100:0;;;;;;;:::i;:::-;17465:12;;17500:14:::1;::::0;::::1;::::0;;17593:1:::1;17573:31:::0;;;;;17567:38;17500:14;;17618:19:::1;17593:1:::0;17500:14;17618:19:::1;:::i;17908:369::-:0;18037:6;17987:7;:14;;;18004:1;17987:18;;;;:::i;:::-;18007:12;;:19;12725:14;;;;-1:-1:-1;12717:100:0;;;;-1:-1:-1;;;12717:100:0;;;;;;;:::i;:::-;18078:12;;18113:14:::1;::::0;::::1;::::0;;18206:1:::1;18186:31:::0;;;;;18180:38;18113:14;;18231:19:::1;18206:1:::0;18113:14;18231:19:::1;:::i;18521:369::-:0;18650:6;18600:7;:14;;;18617:1;18600:18;;;;:::i;:::-;18620:12;;:19;12725:14;;;;-1:-1:-1;12717:100:0;;;;-1:-1:-1;;;12717:100:0;;;;;;;:::i;:::-;18691:12;;18726:14:::1;::::0;::::1;::::0;;18819:1:::1;18799:31:::0;;;;;18793:38;18726:14;;18844:19:::1;18819:1:::0;18726:14;18844:19:::1;:::i;22492:602::-:0;22577:1;22570:4;:8;22562:54;;;;-1:-1:-1;;;22562:54:0;;22640:2:1;22562:54:0;;;22622:21:1;22679:2;22659:18;;;22652:30;22718:34;22698:18;;;22691:62;-1:-1:-1;;;22769:18:1;;;22762:31;22810:19;;22562:54:0;22438:397:1;22562:54:0;22687:2;22679:4;:10;22672:141;;22746:11;;22732:26;;22775:11;22784:2;22739:5;22775:11;:::i;:::-;;-1:-1:-1;22795:10:0;22803:2;22795:10;;:::i;:::-;;-1:-1:-1;22691:10:0;22699:2;22691:10;;:::i;:::-;;;22672:141;;;22823:8;;22819:270;;22873:9;22906:1;22893:9;22898:4;22893:2;:9;:::i;:::-;22885:18;;:3;:18;:::i;:::-;:22;;;;:::i;:::-;22955:11;;23008:12;;23004:23;;22968:9;;22951:27;23051:21;23037:36;;-1:-1:-1;22819:270:0;22492:602;;;:::o;15205:542::-;15304:6;15358:9;15354:156;;;15413:7;15386:34;;15396:7;:14;;;15386:7;:24;;;;:::i;:::-;:34;;;15378:90;;;;-1:-1:-1;;;15378:90:0;;24679:2:1;15378:90:0;;;24661:21:1;24718:2;24698:18;;;24691:30;24757:34;24737:18;;;24730:62;-1:-1:-1;;;24808:18:1;;;24801:41;24859:19;;15378:90:0;24477:407:1;15378:90:0;15488:14;;;;15477:25;;;;:::i;:::-;;;15354:156;15605:12;;:19;15594:30;;;;;15586:96;;;;-1:-1:-1;;;15586:96:0;;25091:2:1;15586:96:0;;;25073:21:1;25130:2;25110:18;;;25103:30;25169:34;25149:18;;;25142:62;-1:-1:-1;;;25220:18:1;;;25213:51;25281:19;;15586:96:0;24889:417:1;15586:96:0;-1:-1:-1;;15689:24:0;;:14;;;;;:24;;;;15205:542::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:248;213:2;207:9;255:4;243:17;;-1:-1:-1;;;;;275:34:1;;311:22;;;272:62;269:88;;;337:18;;:::i;:::-;373:2;366:22;146:248;:::o;399:718::-;441:5;494:3;487:4;479:6;475:17;471:27;461:55;;512:1;509;502:12;461:55;548:6;535:20;-1:-1:-1;;;;;611:2:1;607;604:10;601:36;;;617:18;;:::i;:::-;692:2;686:9;660:2;746:13;;-1:-1:-1;;742:22:1;;;766:2;738:31;734:40;722:53;;;790:18;;;810:22;;;787:46;784:72;;;836:18;;:::i;:::-;876:10;872:2;865:22;911:2;903:6;896:18;957:3;950:4;945:2;937:6;933:15;929:26;926:35;923:55;;;974:1;971;964:12;923:55;1038:2;1031:4;1023:6;1019:17;1012:4;1004:6;1000:17;987:54;1085:1;1078:4;1073:2;1065:6;1061:15;1057:26;1050:37;1105:6;1096:15;;;;;;399:718;;;;:::o;1122:712::-;1175:5;1223:4;1211:9;1206:3;1202:19;1198:30;1195:50;;;1241:1;1238;1231:12;1195:50;1274:4;1268:11;1318:4;1310:6;1306:17;-1:-1:-1;;;;;1410:6:1;1398:10;1395:22;1390:2;1378:10;1375:18;1372:46;1369:72;;;1421:18;;:::i;:::-;1463:10;1457:4;1450:24;1492:6;1483:15;;1534:9;1521:23;1507:37;;1567:2;1559:6;1556:14;1553:34;;;1583:1;1580;1573:12;1553:34;;1611:45;1652:3;1643:6;1632:9;1628:22;1611:45;:::i;:::-;1603:6;1596:61;;1709:2;1698:9;1694:18;1681:32;1757:10;1748:7;1744:24;1735:7;1732:37;1722:65;;1783:1;1780;1773:12;1722:65;1815:2;1803:15;;;;1796:32;1122:712;;-1:-1:-1;;1122:712:1:o;1839:156::-;1905:20;;1965:4;1954:16;;1944:27;;1934:55;;1985:1;1982;1975:12;2000:171;2067:20;;-1:-1:-1;;;;;2116:30:1;;2106:41;;2096:69;;2161:1;2158;2151:12;2176:922;2255:6;2308:2;2296:9;2287:7;2283:23;2279:32;2276:52;;;2324:1;2321;2314:12;2276:52;2364:9;2351:23;-1:-1:-1;;;;;2434:2:1;2426:6;2423:14;2420:34;;;2450:1;2447;2440:12;2420:34;2473:22;;;;2529:4;2511:16;;;2507:27;2504:47;;;2547:1;2544;2537:12;2504:47;2573:17;;:::i;:::-;2628:2;2615:16;2656:2;2646:8;2643:16;2640:36;;;2672:1;2669;2662:12;2640:36;2699:52;2743:7;2732:8;2728:2;2724:17;2699:52;:::i;:::-;2692:5;2685:67;;2784:29;2809:2;2805;2801:11;2784:29;:::i;:::-;2779:2;2772:5;2768:14;2761:53;2846:29;2871:2;2867;2863:11;2846:29;:::i;:::-;2841:2;2834:5;2830:14;2823:53;2908:29;2933:2;2929;2925:11;2908:29;:::i;:::-;2903:2;2896:5;2892:14;2885:53;2971:31;2997:3;2993:2;2989:12;2971:31;:::i;:::-;2965:3;2958:5;2954:15;2947:56;3036:31;3062:3;3058:2;3054:12;3036:31;:::i;:::-;3030:3;3019:15;;3012:56;3023:5;2176:922;-1:-1:-1;;;;;2176:922:1:o;3293:654::-;3470:2;3522:21;;;3592:13;;3495:18;;;3614:22;;;3441:4;;3470:2;3693:15;;;;3667:2;3652:18;;;3441:4;3736:185;3750:6;3747:1;3744:13;3736:185;;;3826:13;;3822:2;3811:29;3799:42;;3896:15;;;;3861:12;;;;3772:1;3765:9;3736:185;;;-1:-1:-1;3938:3:1;;3293:654;-1:-1:-1;;;;;;3293:654:1:o;3952:651::-;4127:2;4179:21;;;4249:13;;4152:18;;;4271:22;;;4098:4;;4127:2;4350:15;;;;4324:2;4309:18;;;4098:4;4393:184;4407:6;4404:1;4401:13;4393:184;;;4482:13;;4479:1;4468:28;4456:41;;4552:15;;;;4517:12;;;;4429:1;4422:9;4393:184;;4928:341;5009:6;5062:2;5050:9;5041:7;5037:23;5033:32;5030:52;;;5078:1;5075;5068:12;5030:52;5118:9;5105:23;-1:-1:-1;;;;;5143:6:1;5140:30;5137:50;;;5183:1;5180;5173:12;5137:50;5206:57;5255:7;5246:6;5235:9;5231:22;5206:57;:::i;5274:258::-;5346:1;5356:113;5370:6;5367:1;5364:13;5356:113;;;5446:11;;;5440:18;5427:11;;;5420:39;5392:2;5385:10;5356:113;;;5487:6;5484:1;5481:13;5478:48;;;5522:1;5513:6;5508:3;5504:16;5497:27;5478:48;;5274:258;;;:::o;5537:257::-;5578:3;5616:5;5610:12;5643:6;5638:3;5631:19;5659:63;5715:6;5708:4;5703:3;5699:14;5692:4;5685:5;5681:16;5659:63;:::i;:::-;5776:2;5755:15;-1:-1:-1;;5751:29:1;5742:39;;;;5783:4;5738:50;;5537:257;-1:-1:-1;;5537:257:1:o;5879:1081::-;6056:2;6045:9;6038:21;6019:4;6094:6;6088:13;6137:4;6132:2;6121:9;6117:18;6110:32;6179:12;6173:19;6229:4;6223:3;6212:9;6208:19;6201:33;6257:53;6305:3;6294:9;6290:19;6274:14;6257:53;:::i;:::-;6243:67;;6381:10;6375:2;6361:12;6357:21;6351:28;6347:45;6341:3;6330:9;6326:19;6319:74;6459:4;6453:2;6445:6;6441:15;6435:22;6431:33;6424:4;6413:9;6409:20;6402:63;6514:4;6506:6;6502:17;6496:24;6474:46;;6529:52;6577:2;6566:9;6562:18;6546:14;5866:4;5855:16;5843:29;;5799:75;6529:52;6630:2;6618:15;;6612:22;5866:4;5855:16;;6691:3;6676:19;;5843:29;6612:22;-1:-1:-1;6745:3:1;6733:16;;6727:23;-1:-1:-1;;;;;4673:30:1;;6808:3;6793:19;;4661:43;6727:23;-1:-1:-1;6862:3:1;6850:16;;6844:23;-1:-1:-1;;;;;4673:30:1;;6925:4;6910:20;;4661:43;6844:23;-1:-1:-1;6876:55:1;4608:102;7570:225;7725:2;7714:9;7707:21;7688:4;7745:44;7785:2;7774:9;7770:18;7762:6;7745:44;:::i;7800:810::-;7970:4;7999:2;8039;8028:9;8024:18;8069:2;8058:9;8051:21;8092:6;8127;8121:13;8158:6;8150;8143:22;8196:2;8185:9;8181:18;8174:25;;8258:2;8248:6;8245:1;8241:14;8230:9;8226:30;8222:39;8208:53;;8296:2;8288:6;8284:15;8317:1;8327:254;8341:6;8338:1;8335:13;8327:254;;;8434:2;8430:7;8418:9;8410:6;8406:22;8402:36;8397:3;8390:49;8462:39;8494:6;8485;8479:13;8462:39;:::i;:::-;8452:49;-1:-1:-1;8559:12:1;;;;8524:15;;;;8363:1;8356:9;8327:254;;;-1:-1:-1;8598:6:1;;7800:810;-1:-1:-1;;;;;;;7800:810:1:o;8615:320::-;8683:6;8736:2;8724:9;8715:7;8711:23;8707:32;8704:52;;;8752:1;8749;8742:12;8704:52;8792:9;8779:23;-1:-1:-1;;;;;8817:6:1;8814:30;8811:50;;;8857:1;8854;8847:12;8811:50;8880:49;8921:7;8912:6;8901:9;8897:22;8880:49;:::i;9172:663::-;9349:2;9401:21;;;9471:13;;9374:18;;;9493:22;;;9320:4;;9349:2;9572:15;;;;9546:2;9531:18;;;9320:4;9615:194;9629:6;9626:1;9623:13;9615:194;;;9694:13;;-1:-1:-1;;;;;9690:38:1;9678:51;;9784:15;;;;9749:12;;;;9651:1;9644:9;9615:194;;9840:127;9901:10;9896:3;9892:20;9889:1;9882:31;9932:4;9929:1;9922:15;9956:4;9953:1;9946:15;9972:168;10012:7;10078:1;10074;10070:6;10066:14;10063:1;10060:21;10055:1;10048:9;10041:17;10037:45;10034:71;;;10085:18;;:::i;:::-;-1:-1:-1;10125:9:1;;9972:168::o;10145:127::-;10206:10;10201:3;10197:20;10194:1;10187:31;10237:4;10234:1;10227:15;10261:4;10258:1;10251:15;10277:135;10316:3;-1:-1:-1;;10337:17:1;;10334:43;;;10357:18;;:::i;:::-;-1:-1:-1;10404:1:1;10393:13;;10277:135::o;10417:487::-;10619:2;10601:21;;;10658:2;10638:18;;;10631:30;-1:-1:-1;;;;;;;;;;;10692:2:1;10677:18;;10670:62;10768:34;10763:2;10748:18;;10741:62;-1:-1:-1;;;10834:3:1;10819:19;;10812:50;10894:3;10879:19;;10417:487::o;10909:469::-;11111:2;11093:21;;;11150:2;11130:18;;;11123:30;11189:34;11184:2;11169:18;;11162:62;11260:34;11255:2;11240:18;;11233:62;-1:-1:-1;;;11326:3:1;11311:19;;11304:32;11368:3;11353:19;;10909:469::o;11383:209::-;11421:3;-1:-1:-1;;;;;11502:2:1;11495:5;11491:14;11529:2;11520:7;11517:15;11514:41;;;11535:18;;:::i;:::-;11584:1;11571:15;;11383:209;-1:-1:-1;;;11383:209:1:o;13919:398::-;13958:4;14003:1;13999:2;13988:17;14040:1;14036:2;14025:17;14070:1;14065:3;14061:11;14154:3;-1:-1:-1;;;;;14113:39:1;14109:49;14104:3;14100:59;14095:2;14088:10;14084:76;14081:102;;;14163:18;;:::i;:::-;14252:3;-1:-1:-1;;;;;14212:44:1;14207:3;14203:54;14199:2;14195:63;14192:89;;;14261:18;;:::i;:::-;-1:-1:-1;14298:13:1;;;13919:398;-1:-1:-1;;;13919:398:1:o;15815:466::-;15990:3;16028:6;16022:13;16044:53;16090:6;16085:3;16078:4;16070:6;16066:17;16044:53;:::i;:::-;16160:13;;16119:16;;;;16182:57;16160:13;16119:16;16216:4;16204:17;;16182:57;:::i;:::-;16255:20;;15815:466;-1:-1:-1;;;;15815:466:1:o;16778:127::-;16839:10;16834:3;16830:20;16827:1;16820:31;16870:4;16867:1;16860:15;16894:4;16891:1;16884:15;16910:199;16949:1;-1:-1:-1;;;;;17020:2:1;17017:1;17013:10;17042:3;17032:37;;17049:18;;:::i;:::-;17087:10;;17083:20;;;;;16910:199;-1:-1:-1;;16910:199:1:o;18099:477::-;18301:2;18283:21;;;18340:2;18320:18;;;18313:30;18379:34;18374:2;18359:18;;18352:62;18450:34;18445:2;18430:18;;18423:62;-1:-1:-1;;;18516:3:1;18501:19;;18494:40;18566:3;18551:19;;18099:477::o;18581:201::-;18619:3;18647:10;18692:2;18685:5;18681:14;18719:2;18710:7;18707:15;18704:41;;;18725:18;;:::i;18787:347::-;18825:4;18869:1;18866;18855:16;18905:1;18902;18891:16;18935:1;18930:3;18926:11;18995:3;18982:10;18978:15;18974:25;18969:3;18965:35;18960:2;18953:10;18949:52;18946:78;;;19004:18;;:::i;:::-;19069:3;19057:10;19053:20;19048:3;19044:30;19040:2;19036:39;19033:65;;;19078:18;;:::i;19139:553::-;19178:7;-1:-1:-1;;;;;19248:9:1;;;19276;;;19301:11;;;19320:10;;;19314:17;;19297:35;19294:61;;;19335:18;;:::i;:::-;-1:-1:-1;;;19411:1:1;19404:9;;19429:11;;;19449;;;19442:19;;19425:37;19422:63;;;19465:18;;:::i;:::-;19511:1;19508;19504:9;19494:19;;19558:1;19554:2;19549:11;19546:1;19542:19;19537:2;19533;19529:11;19525:37;19522:63;;;19565:18;;:::i;:::-;19630:1;19626:2;19621:11;19618:1;19614:19;19609:2;19605;19601:11;19597:37;19594:63;;;19637:18;;:::i;:::-;-1:-1:-1;;;19677:9:1;;;;;19139:553;-1:-1:-1;;;19139:553:1:o;19697:187::-;19731:3;19778:5;19775:1;19764:20;19812:10;19808:15;19799:7;19796:28;19793:54;;;19827:18;;:::i;:::-;19867:1;19863:15;;19697:187;-1:-1:-1;;19697:187:1:o;19889:193::-;19928:1;19954;19944:35;;19959:18;;:::i;:::-;-1:-1:-1;;;19995:18:1;;-1:-1:-1;;20015:13:1;;19991:38;19988:64;;;20032:18;;:::i;:::-;-1:-1:-1;20066:10:1;;19889:193::o;20087:647::-;20125:7;20172:1;20169;20158:16;20208:1;20205;20194:16;20229:10;20267:1;20262:3;20258:11;20297:1;20292:3;20288:11;20344:3;20340:2;20336:12;20331:3;20328:21;20323:2;20319;20315:11;20311:39;20308:65;;;20353:18;;:::i;:::-;-1:-1:-1;;20435:1:1;20426:11;;20453;;;20475:13;;;20466:23;;20449:41;20446:67;;;20493:18;;:::i;:::-;20541:1;20536:3;20532:11;20522:21;;20590:3;20586:2;20581:13;20576:3;20572:23;20567:2;20563;20559:11;20555:41;20552:67;;;20599:18;;:::i;:::-;20666:3;20662:2;20657:13;20652:3;20648:23;20643:2;20639;20635:11;20631:41;20628:67;;;20675:18;;:::i;:::-;-1:-1:-1;;;20715:13:1;;;;;20087:647;-1:-1:-1;;;;;20087:647:1:o;21151:228::-;21190:3;21218:10;21255:2;21252:1;21248:10;21285:2;21282:1;21278:10;21316:3;21312:2;21308:12;21303:3;21300:21;21297:47;;;21324:18;;:::i;21806:229::-;21845:4;-1:-1:-1;;;;;21942:10:1;;;;21912;;21964:12;;;21961:38;;;21979:18;;:::i;:::-;22016:13;;21806:229;-1:-1:-1;;;21806:229:1:o;22040:393::-;22193:3;22231:6;22225:13;22247:53;22293:6;22288:3;22281:4;22273:6;22269:17;22247:53;:::i;:::-;22387:3;22365:16;;;;-1:-1:-1;;;;;;22361:36:1;22322:16;;;;22347:51;;;22425:1;22414:13;;22040:393;-1:-1:-1;;22040:393:1:o;22840:128::-;22880:3;22911:1;22907:6;22904:1;22901:13;22898:39;;;22917:18;;:::i;:::-;-1:-1:-1;22953:9:1;;22840:128::o;22973:125::-;23013:4;23041:1;23038;23035:8;23032:34;;;23046:18;;:::i;:::-;-1:-1:-1;23083:9:1;;22973:125::o;23103:422::-;23192:1;23235:5;23192:1;23249:270;23270:7;23260:8;23257:21;23249:270;;;23329:4;23325:1;23321:6;23317:17;23311:4;23308:27;23305:53;;;23338:18;;:::i;:::-;23388:7;23378:8;23374:22;23371:55;;;23408:16;;;;23371:55;23487:22;;;;23447:15;;;;23249:270;;;23253:3;23103:422;;;;;:::o;23530:806::-;23579:5;23609:8;23599:80;;-1:-1:-1;23650:1:1;23664:5;;23599:80;23698:4;23688:76;;-1:-1:-1;23735:1:1;23749:5;;23688:76;23780:4;23798:1;23793:59;;;;23866:1;23861:130;;;;23773:218;;23793:59;23823:1;23814:10;;23837:5;;;23861:130;23898:3;23888:8;23885:17;23882:43;;;23905:18;;:::i;:::-;-1:-1:-1;;23961:1:1;23947:16;;23976:5;;23773:218;;24075:2;24065:8;24062:16;24056:3;24050:4;24047:13;24043:36;24037:2;24027:8;24024:16;24019:2;24013:4;24010:12;24006:35;24003:77;24000:159;;;-1:-1:-1;24112:19:1;;;24144:5;;24000:159;24191:34;24216:8;24210:4;24191:34;:::i;:::-;24261:6;24257:1;24253:6;24249:19;24240:7;24237:32;24234:58;;;24272:18;;:::i;:::-;24310:20;;23530:806;-1:-1:-1;;;23530:806:1:o;24341:131::-;24401:5;24430:36;24457:8;24451:4;24430:36;:::i
Swarm Source
ipfs://1b4dc73b2c84f723f8f00ded24b6c9ea39b015ab71baa65ccbb2d5eac48b4ee1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|