From 281064982c80b23c9b4a2e5c480a116bdf8e176c Mon Sep 17 00:00:00 2001 From: 0xverin <104152026+0xverin@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:59:47 +0800 Subject: [PATCH] p-867 Refactoring extra params (#2830) * refactor TokenHoldingAmount * refactor erc20&brc20 * add isStringsEqual * refactor erc20 token * refactor brc20 tokens * remove console * reset url * add ERC20TokenLibrary * add BRC20TokenLibrary * getTokenInfo for erc20 * getTokenInfo for brc20 * move if statement * add mapping for tokens * remove unuse setting * fix comment * replace brc20&erc20 * fix mod bytecode * add erc20 tests * fmt * merge brc20&&erc20 * add mod test * fix ci * fix ci one more --------- Co-authored-by: will.li <120463031+higherordertech@users.noreply.github.com> --- .../src/dynamic/contracts/libraries/Utils.sol | 6 + .../contracts/token_holding_amount/BRC20.sol | 82 ---- .../token_holding_amount/Constants.sol | 23 + .../token_holding_amount/GeniidataClient.sol | 61 +++ .../token_holding_amount/NoderealClient.sol | 7 +- .../TokenHoldingAmount.sol | 108 +++-- .../token_holding_amount/TokenMapping.sol | 424 ++++++++++++++++++ .../{ERC20.sol => TokenQueryLogic.sol} | 84 ++-- .../token_holding_amount/brc20/Btcs.sol | 37 +- .../token_holding_amount/brc20/Cats.sol | 35 +- .../token_holding_amount/brc20/Long.sol | 37 +- .../token_holding_amount/brc20/Mmss.sol | 37 +- .../token_holding_amount/brc20/Ordi.sol | 35 +- .../token_holding_amount/brc20/Rats.sol | 37 +- .../token_holding_amount/brc20/Sats.sol | 37 +- .../token_holding_amount/erc20/Ada.sol | 47 +- .../token_holding_amount/erc20/Amp.sol | 55 ++- .../token_holding_amount/erc20/Atom.sol | 47 +- .../token_holding_amount/erc20/Bch.sol | 36 +- .../token_holding_amount/erc20/Bean.sol | 46 +- .../token_holding_amount/erc20/Bnb.sol | 52 +-- .../token_holding_amount/erc20/Comp.sol | 54 ++- .../token_holding_amount/erc20/Cro.sol | 48 +- .../token_holding_amount/erc20/Crv.sol | 54 ++- .../token_holding_amount/erc20/Cvx.sol | 55 ++- .../token_holding_amount/erc20/Dai.sol | 52 ++- .../token_holding_amount/erc20/Doge.sol | 48 +- .../token_holding_amount/erc20/Dydx.sol | 54 ++- .../token_holding_amount/erc20/Etc.sol | 46 +- .../token_holding_amount/erc20/Eth.sol | 31 +- .../token_holding_amount/erc20/Fil.sol | 46 +- .../token_holding_amount/erc20/Grt.sol | 54 ++- .../token_holding_amount/erc20/Gtc.sol | 54 ++- .../token_holding_amount/erc20/Gusd.sol | 54 ++- .../token_holding_amount/erc20/Imx.sol | 50 +-- .../token_holding_amount/erc20/Inj.sol | 46 +- .../token_holding_amount/erc20/Leo.sol | 46 +- .../token_holding_amount/erc20/Link.sol | 54 ++- .../token_holding_amount/erc20/Lit.sol | 54 ++- .../token_holding_amount/erc20/Matic.sol | 54 ++- .../token_holding_amount/erc20/Mcrt.sol | 47 +- .../token_holding_amount/erc20/Nfp.sol | 54 ++- .../token_holding_amount/erc20/People.sol | 54 ++- .../token_holding_amount/erc20/Shib.sol | 50 +-- .../token_holding_amount/erc20/Sol.sol | 55 ++- .../token_holding_amount/erc20/SpaceId.sol | 57 ++- .../token_holding_amount/erc20/Ton.sol | 55 ++- .../token_holding_amount/erc20/Trx.sol | 55 ++- .../token_holding_amount/erc20/Tusd.sol | 55 ++- .../token_holding_amount/erc20/Uni.sol | 53 ++- .../token_holding_amount/erc20/Usdc.sol | 53 ++- .../token_holding_amount/erc20/Usdd.sol | 55 ++- .../token_holding_amount/erc20/Usdt.sol | 54 ++- .../token_holding_amount/erc20/Wbtc.sol | 35 +- .../assertion-build/src/dynamic/repository.rs | 23 +- 55 files changed, 1715 insertions(+), 1327 deletions(-) delete mode 100644 tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/BRC20.sol create mode 100644 tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/Constants.sol create mode 100644 tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/GeniidataClient.sol create mode 100644 tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenMapping.sol rename tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/{ERC20.sol => TokenQueryLogic.sol} (52%) diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/libraries/Utils.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/libraries/Utils.sol index 6ab2c5a387..4299dff80d 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/libraries/Utils.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/libraries/Utils.sol @@ -168,4 +168,10 @@ library Utils { return (success, value); } + function isStringsEqual( + string memory a, + string memory b + ) internal pure returns (bool) { + return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/BRC20.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/BRC20.sol deleted file mode 100644 index 4f6af277f9..0000000000 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/BRC20.sol +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright 2020-2024 Trust Computing GmbH. -// This file is part of Litentry. -// -// Litentry is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Litentry is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Litentry. If not, see . - -// SPDX-License-Identifier: GPL-3.0-or-later - -pragma solidity ^0.8.8; - -import "../libraries/Identities.sol"; -import "../libraries/Http.sol"; -import "../libraries/Utils.sol"; -import {TokenHoldingAmount} from "./TokenHoldingAmount.sol"; - -abstract contract BRC20 is TokenHoldingAmount { - function getTokenDecimals() internal pure override returns (uint8) { - return 18; - } - - function queryBalance( - Identity memory identity, - uint32 network, - string[] memory secrets - ) internal virtual override returns (uint256) { - (bool identityToStringSuccess, string memory identityString) = Utils - .identityToString(network, identity.value); - if (identityToStringSuccess) { - // https://geniidata.readme.io/reference/get-brc20-tick-list-copy - string memory url = string( - abi.encodePacked( - "https://api.geniidata.com/api/1/brc20/balance", - // below url is used for test against mock server - // "http://localhost:19529/api/1/brc20/balance", - "?tick=", - getTokenName(), - "&address=", - identityString - ) - ); - - HttpHeader[] memory headers = new HttpHeader[](1); - headers[0] = HttpHeader("api-key", secrets[0]); - - (bool success, string memory value) = Http.GetString( - url, - "/data/list/0/available_balance", - headers - ); - - if (success) { - (bool parseDecimalSuccess, uint256 result) = Utils.parseDecimal( - value, - getTokenDecimals() - ); - if (parseDecimalSuccess) { - return result; - } - } - } - return 0; - } - - function isSupportedNetwork(uint32 network) - internal - pure - override - returns (bool) - { - return network == Web3Networks.BitcoinP2tr; - } -} diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/Constants.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/Constants.sol new file mode 100644 index 0000000000..1d2abea24c --- /dev/null +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/Constants.sol @@ -0,0 +1,23 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +library Constants { + uint256 constant decimals_factor = 1000; +} diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/GeniidataClient.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/GeniidataClient.sol new file mode 100644 index 0000000000..4b564ed80d --- /dev/null +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/GeniidataClient.sol @@ -0,0 +1,61 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../libraries/Http.sol"; +import "../libraries/Utils.sol"; +library GeniidataClient { + function getTokenBalance( + string[] memory secrets, + string memory url, + string memory identityString, + string memory tokenName, + uint8 tokenDecimals + ) internal returns (uint256) { + string memory encodePackedUrl = string( + abi.encodePacked( + url, + "?tick=", + tokenName, + "&address=", + identityString + ) + ); + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("api-key", secrets[1]); + + // https://geniidata.readme.io/reference/get-brc20-tick-list-copy + (bool success, string memory value) = Http.GetString( + encodePackedUrl, + "/data/list/0/available_balance", + headers + ); + + if (success) { + (bool parseDecimalSuccess, uint256 result) = Utils.parseDecimal( + value, + tokenDecimals + ); + if (parseDecimalSuccess) { + return result; + } + } + return 0; + } +} diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/NoderealClient.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/NoderealClient.sol index e0b5fd7a2e..6df76cee62 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/NoderealClient.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/NoderealClient.sol @@ -23,11 +23,16 @@ import "../libraries/Utils.sol"; library NoderealClient { function getTokenBalance( string memory url, + string[] memory secrets, string memory tokenContractAddress, string memory account ) internal returns (bool, uint256) { HttpHeader[] memory headers = new HttpHeader[](0); string memory request; + + string memory encodePackedUrl = string( + abi.encodePacked(url, secrets[0]) + ); if ( keccak256(bytes(tokenContractAddress)) == keccak256("Native Token") ) { @@ -54,7 +59,7 @@ library NoderealClient { return (false, 0); } (bool result, string memory balance) = Http.PostString( - url, + encodePackedUrl, "/result", request, headers diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenHoldingAmount.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenHoldingAmount.sol index ebaa5f627e..9867889ce1 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenHoldingAmount.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenHoldingAmount.sol @@ -22,33 +22,56 @@ import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contr import "../libraries/AssertionLogic.sol"; import "../libraries/Identities.sol"; import "../DynamicAssertion.sol"; +import "./Constants.sol"; + abstract contract TokenHoldingAmount is DynamicAssertion { - uint256 constant decimals_factor = 1000; - function execute( - Identity[] memory identities, - string[] memory secrets, - bytes memory /*params*/ - ) - public - override - returns ( - string memory, - string memory, - string[] memory, - string memory, - bool - ) - { - string - memory description = "The amount of a particular token you are holding"; - string memory assertion_type = "Token Holding Amount"; - schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/25-token-holding-amount/1-1-0.json"; - - uint256 balance = queryTotalBalance(identities, secrets); - - (uint256 index, uint256 min, int256 max) = calculateRange(balance); - - string[] memory assertions = assembleAssertions(min, max); + mapping(string => string) internal tokenNames; + mapping(string => uint256[]) internal tokenRanges; + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory params + ) + public + override + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ) + { + string + memory description = "The amount of a particular token you are holding"; + string memory assertion_type = "Token Holding Amount"; + schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/25-token-holding-amount/1-1-0.json"; + + string memory tokenLowercaseName = abi.decode(params, (string)); + + if ( + keccak256(abi.encodePacked(tokenNames[tokenLowercaseName])) == + keccak256(abi.encodePacked("")) + ) { + revert("Token not supported or not found"); + } + + uint256 balance = queryTotalBalance( + identities, + secrets, + tokenNames[tokenLowercaseName] + ); + + (uint256 index, uint256 min, int256 max) = calculateRange( + balance, + tokenRanges[tokenLowercaseName] + ); + + string[] memory assertions = assembleAssertions( + min, + max, + tokenNames[tokenLowercaseName] + ); bool result = index > 0 || balance > 0; @@ -57,7 +80,8 @@ abstract contract TokenHoldingAmount is DynamicAssertion { function queryTotalBalance( Identity[] memory identities, - string[] memory secrets + string[] memory secrets, + string memory tokenName ) internal virtual returns (uint256) { uint256 total_balance = 0; uint256 identitiesLength = identities.length; @@ -68,7 +92,12 @@ abstract contract TokenHoldingAmount is DynamicAssertion { for (uint32 j = 0; j < networksLength; j++) { uint32 network = identity.networks[j]; if (isSupportedNetwork(network)) { - total_balance += queryBalance(identity, network, secrets); + total_balance += queryBalance( + identity, + network, + secrets, + tokenName + ); } } } @@ -77,16 +106,17 @@ abstract contract TokenHoldingAmount is DynamicAssertion { } function calculateRange( - uint256 balance + uint256 balance, + uint256[] memory ranges ) private pure returns (uint256, uint256, int256) { - uint256[] memory ranges = getTokenRanges(); uint256 index = ranges.length - 1; uint256 min = 0; int256 max = 0; for (uint32 i = 1; i < ranges.length; i++) { if ( - balance * decimals_factor < ranges[i] * 10 ** getTokenDecimals() + balance * Constants.decimals_factor < + ranges[i] * 10 ** getTokenDecimals() ) { index = i - 1; break; @@ -106,7 +136,8 @@ abstract contract TokenHoldingAmount is DynamicAssertion { function assembleAssertions( uint256 min, - int256 max + int256 max, + string memory tokenName ) private pure returns (string[] memory) { string memory variable = "$holding_amount"; AssertionLogic.CompositeCondition memory cc = AssertionLogic @@ -119,14 +150,14 @@ abstract contract TokenHoldingAmount is DynamicAssertion { 0, "$token", AssertionLogic.Op.Equal, - getTokenName() + tokenName ); AssertionLogic.andOp( cc, 1, variable, AssertionLogic.Op.GreaterEq, - Strings.toString(min / decimals_factor) + Strings.toString(min / Constants.decimals_factor) ); if (max > 0) { AssertionLogic.andOp( @@ -134,7 +165,7 @@ abstract contract TokenHoldingAmount is DynamicAssertion { 2, variable, AssertionLogic.Op.LessThan, - Strings.toString(uint256(max) / decimals_factor) + Strings.toString(uint256(max) / Constants.decimals_factor) ); } @@ -144,10 +175,6 @@ abstract contract TokenHoldingAmount is DynamicAssertion { return assertions; } - function getTokenName() internal pure virtual returns (string memory); - - function getTokenRanges() internal pure virtual returns (uint256[] memory); - function getTokenDecimals() internal pure virtual returns (uint8); function isSupportedNetwork( @@ -157,6 +184,7 @@ abstract contract TokenHoldingAmount is DynamicAssertion { function queryBalance( Identity memory identity, uint32 network, - string[] memory secrets + string[] memory secrets, + string memory tokenName ) internal virtual returns (uint256); } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenMapping.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenMapping.sol new file mode 100644 index 0000000000..dfce614069 --- /dev/null +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenMapping.sol @@ -0,0 +1,424 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import { TokenQueryLogic } from "./TokenQueryLogic.sol"; +import "../libraries/Identities.sol"; + +// brc20 +import { Btcs } from "./brc20/Btcs.sol"; +import { Cats } from "./brc20/Cats.sol"; +import { Long } from "./brc20/Long.sol"; +import { Mmss } from "./brc20/Mmss.sol"; +import { Ordi } from "./brc20/Ordi.sol"; +import { Rats } from "./brc20/Rats.sol"; +import { Sats } from "./brc20/Sats.sol"; + +// erc20 +import { Ada } from "./erc20/Ada.sol"; +import { Amp } from "./erc20/Amp.sol"; +import { Atom } from "./erc20/Atom.sol"; +import { Bch } from "./erc20/Bch.sol"; +import { Bean } from "./erc20/Bean.sol"; +import { Bnb } from "./erc20/Bnb.sol"; +import { Comp } from "./erc20/Comp.sol"; +import { Cro } from "./erc20/Cro.sol"; +import { Crv } from "./erc20/Crv.sol"; +import { Dai } from "./erc20/Dai.sol"; +import { Doge } from "./erc20/Doge.sol"; +import { Dydx } from "./erc20/Dydx.sol"; +import { Etc } from "./erc20/Etc.sol"; +import { Eth } from "./erc20/Eth.sol"; +import { Fil } from "./erc20/Fil.sol"; +import { Grt } from "./erc20/Grt.sol"; +import { Gtc } from "./erc20/Gtc.sol"; +import { Gusd } from "./erc20/Gusd.sol"; +import { Imx } from "./erc20/Imx.sol"; +import { Inj } from "./erc20/Inj.sol"; +import { Leo } from "./erc20/Leo.sol"; +import { Link } from "./erc20/Link.sol"; +import { Lit } from "./erc20/Lit.sol"; +import { Matic } from "./erc20/Matic.sol"; +import { Mcrt } from "./erc20//Mcrt.sol"; +import { Nfp } from "./erc20/Nfp.sol"; +import { People } from "./erc20/People.sol"; +import { Shib } from "./erc20//Shib.sol"; +import { Sol } from "./erc20/Sol.sol"; +import { SpaceId } from "./erc20/SpaceId.sol"; +import { Ton } from "./erc20/Ton.sol"; +import { Trx } from "./erc20/Trx.sol"; +import { Tusd } from "./erc20/Tusd.sol"; +import { Uni } from "./erc20/Uni.sol"; +import { Usdc } from "./erc20/Usdc.sol"; +import { Usdt } from "./erc20/Usdt.sol"; +import { Wbtc } from "./erc20//Wbtc.sol"; +import { Cvx } from "./erc20/Cvx.sol"; +import { Usdd } from "./erc20/Usdd.sol"; +contract TokenMapping is TokenQueryLogic { + constructor() { + // btcs + tokenNames["btcs"] = Btcs.getTokenName(); + tokenRanges["btcs"] = Btcs.getTokenRanges(); + tokenNetworks["btcs"] = Btcs.getTokenNetworks(); + + // cats + tokenNames["cats"] = Cats.getTokenName(); + tokenRanges["cats"] = Cats.getTokenRanges(); + tokenNetworks["cats"] = Cats.getTokenNetworks(); + + // long + tokenNames["long"] = Long.getTokenName(); + tokenRanges["long"] = Long.getTokenRanges(); + tokenNetworks["long"] = Long.getTokenNetworks(); + + // long + tokenNames["mmss"] = Mmss.getTokenName(); + tokenRanges["mmss"] = Mmss.getTokenRanges(); + tokenNetworks["mmss"] = Mmss.getTokenNetworks(); + + // ordi + tokenNames["ordi"] = Ordi.getTokenName(); + tokenRanges["ordi"] = Ordi.getTokenRanges(); + tokenNetworks["ordi"] = Ordi.getTokenNetworks(); + + // rats + tokenNames["rats"] = Rats.getTokenName(); + tokenRanges["rats"] = Rats.getTokenRanges(); + tokenNetworks["rats"] = Rats.getTokenNetworks(); + + // sats + tokenNames["sats"] = Sats.getTokenName(); + tokenRanges["sats"] = Sats.getTokenRanges(); + tokenNetworks["sats"] = Sats.getTokenNetworks(); + + // ada + tokenNames["ada"] = Ada.getTokenName(); + tokenRanges["ada"] = Ada.getTokenRanges(); + tokenNetworks["ada"] = Ada.getTokenNetworks(); + tokenAddresses["ada"][Web3Networks.Bsc] = Ada.getTokenBscAddress(); + tokenAddresses["ada"][Web3Networks.Ethereum] = Ada + .getTokenEthereumAddress(); + + // amp + tokenNames["amp"] = Amp.getTokenName(); + tokenRanges["amp"] = Amp.getTokenRanges(); + tokenNetworks["amp"] = Amp.getTokenNetworks(); + tokenAddresses["amp"][Web3Networks.Bsc] = Amp.getTokenBscAddress(); + tokenAddresses["amp"][Web3Networks.Ethereum] = Amp + .getTokenEthereumAddress(); + + // atom + tokenNames["atom"] = Atom.getTokenName(); + tokenRanges["atom"] = Atom.getTokenRanges(); + tokenNetworks["atom"] = Atom.getTokenNetworks(); + tokenAddresses["atom"][Web3Networks.Bsc] = Atom.getTokenBscAddress(); + tokenAddresses["atom"][Web3Networks.Ethereum] = Atom + .getTokenEthereumAddress(); + + // bch + tokenNames["bch"] = Bch.getTokenName(); + tokenRanges["bch"] = Bch.getTokenRanges(); + tokenNetworks["bch"] = Bch.getTokenNetworks(); + tokenAddresses["bch"][Web3Networks.Bsc] = Bch.getTokenBscAddress(); + tokenAddresses["bch"][Web3Networks.Ethereum] = Bch + .getTokenEthereumAddress(); + + // bean + tokenNames["bean"] = Bean.getTokenName(); + tokenRanges["bean"] = Bean.getTokenRanges(); + tokenNetworks["bean"] = Bean.getTokenNetworks(); + tokenAddresses["bean"][Web3Networks.Bsc] = Bean.getTokenBscAddress(); + tokenAddresses["bean"][Web3Networks.Ethereum] = Bean + .getTokenEthereumAddress(); + + // bnb + tokenNames["bnb"] = Bnb.getTokenName(); + tokenRanges["bnb"] = Bnb.getTokenRanges(); + tokenNetworks["bnb"] = Bnb.getTokenNetworks(); + tokenAddresses["bnb"][Web3Networks.Bsc] = Bnb.getTokenBscAddress(); + tokenAddresses["bnb"][Web3Networks.Ethereum] = Bnb + .getTokenEthereumAddress(); + + // comp + tokenNames["comp"] = Comp.getTokenName(); + tokenRanges["comp"] = Comp.getTokenRanges(); + tokenNetworks["comp"] = Comp.getTokenNetworks(); + tokenAddresses["comp"][Web3Networks.Bsc] = Comp.getTokenBscAddress(); + tokenAddresses["comp"][Web3Networks.Ethereum] = Comp + .getTokenEthereumAddress(); + + // cro + tokenNames["cro"] = Cro.getTokenName(); + tokenRanges["cro"] = Cro.getTokenRanges(); + tokenNetworks["cro"] = Cro.getTokenNetworks(); + tokenAddresses["cro"][Web3Networks.Bsc] = Cro.getTokenBscAddress(); + tokenAddresses["cro"][Web3Networks.Ethereum] = Cro + .getTokenEthereumAddress(); + + // crv + tokenNames["crv"] = Crv.getTokenName(); + tokenRanges["crv"] = Crv.getTokenRanges(); + tokenNetworks["crv"] = Crv.getTokenNetworks(); + tokenAddresses["crv"][Web3Networks.Bsc] = Crv.getTokenBscAddress(); + tokenAddresses["crv"][Web3Networks.Ethereum] = Crv + .getTokenEthereumAddress(); + + // cvx + tokenNames["cvx"] = Cvx.getTokenName(); + tokenRanges["cvx"] = Cvx.getTokenRanges(); + tokenNetworks["cvx"] = Cvx.getTokenNetworks(); + tokenAddresses["cvx"][Web3Networks.Bsc] = Cvx.getTokenBscAddress(); + tokenAddresses["cvx"][Web3Networks.Ethereum] = Cvx + .getTokenEthereumAddress(); + + // dai + tokenNames["dai"] = Dai.getTokenName(); + tokenRanges["dai"] = Dai.getTokenRanges(); + tokenNetworks["dai"] = Dai.getTokenNetworks(); + tokenAddresses["dai"][Web3Networks.Bsc] = Dai.getTokenBscAddress(); + tokenAddresses["dai"][Web3Networks.Ethereum] = Dai + .getTokenEthereumAddress(); + + // doge + tokenNames["doge"] = Doge.getTokenName(); + tokenRanges["doge"] = Doge.getTokenRanges(); + tokenNetworks["doge"] = Doge.getTokenNetworks(); + tokenAddresses["doge"][Web3Networks.Bsc] = Doge.getTokenBscAddress(); + tokenAddresses["doge"][Web3Networks.Ethereum] = Doge + .getTokenEthereumAddress(); + + // dydx + tokenNames["dydx"] = Dydx.getTokenName(); + tokenRanges["dydx"] = Dydx.getTokenRanges(); + tokenNetworks["dydx"] = Dydx.getTokenNetworks(); + tokenAddresses["dydx"][Web3Networks.Bsc] = Dydx.getTokenBscAddress(); + tokenAddresses["dydx"][Web3Networks.Ethereum] = Dydx + .getTokenEthereumAddress(); + + // etc + tokenNames["etc"] = Etc.getTokenName(); + tokenRanges["etc"] = Etc.getTokenRanges(); + tokenNetworks["etc"] = Etc.getTokenNetworks(); + tokenAddresses["etc"][Web3Networks.Bsc] = Etc.getTokenBscAddress(); + tokenAddresses["etc"][Web3Networks.Ethereum] = Etc + .getTokenEthereumAddress(); + + // eth + tokenNames["eth"] = Eth.getTokenName(); + tokenRanges["eth"] = Eth.getTokenRanges(); + tokenNetworks["eth"] = Eth.getTokenNetworks(); + tokenAddresses["eth"][Web3Networks.Bsc] = Eth.getTokenBscAddress(); + tokenAddresses["eth"][Web3Networks.Ethereum] = Eth + .getTokenEthereumAddress(); + + // fil + tokenNames["fil"] = Fil.getTokenName(); + tokenRanges["fil"] = Fil.getTokenRanges(); + tokenNetworks["fil"] = Fil.getTokenNetworks(); + tokenAddresses["fil"][Web3Networks.Bsc] = Fil.getTokenBscAddress(); + tokenAddresses["fil"][Web3Networks.Ethereum] = Fil + .getTokenEthereumAddress(); + + // grt + tokenNames["grt"] = Grt.getTokenName(); + tokenRanges["grt"] = Grt.getTokenRanges(); + tokenNetworks["grt"] = Grt.getTokenNetworks(); + tokenAddresses["grt"][Web3Networks.Bsc] = Grt.getTokenBscAddress(); + tokenAddresses["grt"][Web3Networks.Ethereum] = Grt + .getTokenEthereumAddress(); + + // gtc + tokenNames["gtc"] = Gtc.getTokenName(); + tokenRanges["gtc"] = Gtc.getTokenRanges(); + tokenNetworks["gtc"] = Gtc.getTokenNetworks(); + tokenAddresses["gtc"][Web3Networks.Bsc] = Gtc.getTokenBscAddress(); + tokenAddresses["gtc"][Web3Networks.Ethereum] = Gtc + .getTokenEthereumAddress(); + + // gusd + tokenNames["gusd"] = Gusd.getTokenName(); + tokenRanges["gusd"] = Gusd.getTokenRanges(); + tokenNetworks["gusd"] = Gusd.getTokenNetworks(); + tokenAddresses["gusd"][Web3Networks.Bsc] = Gusd.getTokenBscAddress(); + tokenAddresses["gusd"][Web3Networks.Ethereum] = Gusd + .getTokenEthereumAddress(); + + // imx + tokenNames["imx"] = Imx.getTokenName(); + tokenRanges["imx"] = Imx.getTokenRanges(); + tokenNetworks["imx"] = Imx.getTokenNetworks(); + tokenAddresses["imx"][Web3Networks.Bsc] = Imx.getTokenBscAddress(); + tokenAddresses["imx"][Web3Networks.Ethereum] = Imx + .getTokenEthereumAddress(); + + // inj + tokenNames["inj"] = Inj.getTokenName(); + tokenRanges["inj"] = Inj.getTokenRanges(); + tokenNetworks["inj"] = Inj.getTokenNetworks(); + tokenAddresses["inj"][Web3Networks.Bsc] = Inj.getTokenBscAddress(); + tokenAddresses["inj"][Web3Networks.Ethereum] = Inj + .getTokenEthereumAddress(); + + // leo + tokenNames["leo"] = Leo.getTokenName(); + tokenRanges["leo"] = Leo.getTokenRanges(); + tokenNetworks["leo"] = Leo.getTokenNetworks(); + tokenAddresses["leo"][Web3Networks.Bsc] = Leo.getTokenBscAddress(); + tokenAddresses["leo"][Web3Networks.Ethereum] = Leo + .getTokenEthereumAddress(); + + // link + tokenNames["link"] = Link.getTokenName(); + tokenRanges["link"] = Link.getTokenRanges(); + tokenNetworks["link"] = Link.getTokenNetworks(); + tokenAddresses["link"][Web3Networks.Bsc] = Link.getTokenBscAddress(); + tokenAddresses["link"][Web3Networks.Ethereum] = Link + .getTokenEthereumAddress(); + + // lit + tokenNames["lit"] = Lit.getTokenName(); + tokenRanges["lit"] = Lit.getTokenRanges(); + tokenNetworks["lit"] = Lit.getTokenNetworks(); + tokenAddresses["lit"][Web3Networks.Bsc] = Lit.getTokenBscAddress(); + tokenAddresses["lit"][Web3Networks.Ethereum] = Lit + .getTokenEthereumAddress(); + + // matic + tokenNames["matic"] = Matic.getTokenName(); + tokenRanges["matic"] = Matic.getTokenRanges(); + tokenNetworks["matic"] = Matic.getTokenNetworks(); + tokenAddresses["matic"][Web3Networks.Bsc] = Matic.getTokenBscAddress(); + tokenAddresses["matic"][Web3Networks.Ethereum] = Matic + .getTokenEthereumAddress(); + + // mcrt + tokenNames["mcrt"] = Mcrt.getTokenName(); + tokenRanges["mcrt"] = Mcrt.getTokenRanges(); + tokenNetworks["mcrt"] = Mcrt.getTokenNetworks(); + tokenAddresses["mcrt"][Web3Networks.Bsc] = Mcrt.getTokenBscAddress(); + tokenAddresses["mcrt"][Web3Networks.Ethereum] = Mcrt + .getTokenEthereumAddress(); + + // nfp + tokenNames["nfp"] = Nfp.getTokenName(); + tokenRanges["nfp"] = Nfp.getTokenRanges(); + tokenNetworks["nfp"] = Nfp.getTokenNetworks(); + tokenAddresses["nfp"][Web3Networks.Bsc] = Nfp.getTokenBscAddress(); + tokenAddresses["nfp"][Web3Networks.Ethereum] = Nfp + .getTokenEthereumAddress(); + + // people + tokenNames["people"] = People.getTokenName(); + tokenRanges["people"] = People.getTokenRanges(); + tokenNetworks["people"] = People.getTokenNetworks(); + tokenAddresses["people"][Web3Networks.Bsc] = People + .getTokenBscAddress(); + tokenAddresses["people"][Web3Networks.Ethereum] = People + .getTokenEthereumAddress(); + + // shib + tokenNames["shib"] = Shib.getTokenName(); + tokenRanges["shib"] = Shib.getTokenRanges(); + tokenNetworks["shib"] = Shib.getTokenNetworks(); + tokenAddresses["shib"][Web3Networks.Bsc] = Shib.getTokenBscAddress(); + tokenAddresses["shib"][Web3Networks.Ethereum] = Shib + .getTokenEthereumAddress(); + + // sol + tokenNames["sol"] = Sol.getTokenName(); + tokenRanges["sol"] = Sol.getTokenRanges(); + tokenNetworks["sol"] = Sol.getTokenNetworks(); + tokenAddresses["sol"][Web3Networks.Bsc] = Sol.getTokenBscAddress(); + tokenAddresses["sol"][Web3Networks.Ethereum] = Sol + .getTokenEthereumAddress(); + + // spaceid + tokenNames["spaceid"] = SpaceId.getTokenName(); + tokenRanges["spaceid"] = SpaceId.getTokenRanges(); + tokenNetworks["spaceid"] = SpaceId.getTokenNetworks(); + tokenAddresses["spaceid"][Web3Networks.Bsc] = SpaceId + .getTokenBscAddress(); + tokenAddresses["spaceid"][Web3Networks.Ethereum] = SpaceId + .getTokenEthereumAddress(); + + // ton + tokenNames["ton"] = Ton.getTokenName(); + tokenRanges["ton"] = Ton.getTokenRanges(); + tokenNetworks["ton"] = Ton.getTokenNetworks(); + tokenAddresses["ton"][Web3Networks.Bsc] = Ton.getTokenBscAddress(); + tokenAddresses["ton"][Web3Networks.Ethereum] = Ton + .getTokenEthereumAddress(); + + // trx + tokenNames["trx"] = Trx.getTokenName(); + tokenRanges["trx"] = Trx.getTokenRanges(); + tokenNetworks["trx"] = Trx.getTokenNetworks(); + tokenAddresses["trx"][Web3Networks.Bsc] = Trx.getTokenBscAddress(); + tokenAddresses["trx"][Web3Networks.Ethereum] = Trx + .getTokenEthereumAddress(); + + // tusd + tokenNames["tusd"] = Tusd.getTokenName(); + tokenRanges["tusd"] = Tusd.getTokenRanges(); + tokenNetworks["tusd"] = Tusd.getTokenNetworks(); + tokenAddresses["tusd"][Web3Networks.Bsc] = Tusd.getTokenBscAddress(); + tokenAddresses["tusd"][Web3Networks.Ethereum] = Tusd + .getTokenEthereumAddress(); + + // uni + tokenNames["uni"] = Uni.getTokenName(); + tokenRanges["uni"] = Uni.getTokenRanges(); + tokenNetworks["uni"] = Uni.getTokenNetworks(); + tokenAddresses["uni"][Web3Networks.Bsc] = Uni.getTokenBscAddress(); + tokenAddresses["uni"][Web3Networks.Ethereum] = Uni + .getTokenEthereumAddress(); + + // usdc + tokenNames["usdc"] = Usdc.getTokenName(); + tokenRanges["usdc"] = Usdc.getTokenRanges(); + tokenNetworks["usdc"] = Usdc.getTokenNetworks(); + tokenAddresses["usdc"][Web3Networks.Bsc] = Usdc.getTokenBscAddress(); + tokenAddresses["usdc"][Web3Networks.Ethereum] = Usdc + .getTokenEthereumAddress(); + + // usdd + tokenNames["usdd"] = Usdd.getTokenName(); + tokenRanges["usdd"] = Usdd.getTokenRanges(); + tokenNetworks["usdd"] = Usdd.getTokenNetworks(); + tokenAddresses["usdd"][Web3Networks.Bsc] = Usdd.getTokenBscAddress(); + tokenAddresses["usdd"][Web3Networks.Ethereum] = Usdd + .getTokenEthereumAddress(); + + // usdt + tokenNames["usdt"] = Usdt.getTokenName(); + tokenRanges["usdt"] = Usdt.getTokenRanges(); + tokenNetworks["usdt"] = Usdt.getTokenNetworks(); + tokenAddresses["usdt"][Web3Networks.Bsc] = Usdt.getTokenBscAddress(); + tokenAddresses["usdt"][Web3Networks.Ethereum] = Usdt + .getTokenEthereumAddress(); + + // wbtc + tokenNames["wbtc"] = Wbtc.getTokenName(); + tokenRanges["wbtc"] = Wbtc.getTokenRanges(); + tokenNetworks["wbtc"] = Wbtc.getTokenNetworks(); + tokenAddresses["wbtc"][Web3Networks.Bsc] = Wbtc.getTokenBscAddress(); + tokenAddresses["wbtc"][Web3Networks.Ethereum] = Wbtc + .getTokenEthereumAddress(); + } +} diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/ERC20.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenQueryLogic.sol similarity index 52% rename from tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/ERC20.sol rename to tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenQueryLogic.sol index 0fbddcb8ef..e70c002eca 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/ERC20.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/TokenQueryLogic.sol @@ -17,25 +17,32 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.8; + import "../libraries/Identities.sol"; import "../libraries/Utils.sol"; import { TokenHoldingAmount } from "./TokenHoldingAmount.sol"; import { NoderealClient } from "./NoderealClient.sol"; -abstract contract ERC20 is TokenHoldingAmount { - mapping(uint32 => string) internal networkTokenAddresses; - +import { GeniidataClient } from "./GeniidataClient.sol"; +abstract contract TokenLogic is TokenHoldingAmount { mapping(uint32 => string) internal networkUrls; mapping(uint32 => bool) private queriedNetworks; + mapping(string => mapping(uint32 => string)) tokenAddresses; + mapping(string => string) internal tokenBscAddress; + mapping(string => string) internal tokenEthereumAddress; + mapping(string => uint32[]) internal tokenNetworks; + constructor() { - networkUrls[Web3Networks.Bsc] = "https://bsc-mainnet.nodereal.io/v1/"; + networkUrls[Web3Networks.Bsc] = "https://bsc-mainnet.nodereal.io/v1/"; // test against mock server => "http://localhost:19530/nodereal_jsonrpc/" networkUrls[ Web3Networks.Ethereum - ] = "https://eth-mainnet.nodereal.io/v1"; + ] = "https://eth-mainnet.nodereal.io/v1/"; // test against mock server => "http://localhost:19530/nodereal_jsonrpc/" + + networkUrls[ + Web3Networks.BitcoinP2tr + ] = "https://api.geniidata.com/api/1/brc20/balance"; // test against mock server => "http://localhost:19529/api/1/brc20/balance" // Add more networks as needed - - // below url is used for test against mock server - // "http://localhost:19530/nodereal_jsonrpc/v1/", } + function getTokenDecimals() internal pure override returns (uint8) { return 18; } @@ -43,39 +50,51 @@ abstract contract ERC20 is TokenHoldingAmount { function queryBalance( Identity memory identity, uint32 network, - string[] memory secrets - ) internal virtual override returns (uint256) { + string[] memory secrets, + string memory tokenName + ) internal override returns (uint256) { (bool identityToStringSuccess, string memory identityString) = Utils .identityToString(network, identity.value); if (identityToStringSuccess) { string memory url; - uint32[] memory networks = getTokenNetworks(); + uint32[] memory networks = tokenNetworks[tokenName]; uint256 totalBalance = 0; for (uint32 i = 0; i < networks.length; i++) { // Check if this network has been queried - if (!queriedNetworks[network]) { - string memory _tokenContractAddress = networkTokenAddresses[ - network - ]; + url = networkUrls[networks[i]]; - url = string( - abi.encodePacked(networkUrls[networks[i]], secrets[0]) - ); - - (bool success, uint256 balance) = NoderealClient - .getTokenBalance( + if (!queriedNetworks[networks[i]]) { + string memory _tokenContractAddress = tokenAddresses[ + tokenName + ][networks[i]]; + if (networks[i] == Web3Networks.BitcoinP2tr) { + uint256 balance = GeniidataClient.getTokenBalance( + secrets, url, - _tokenContractAddress, - identityString + identityString, + tokenName, + getTokenDecimals() ); - - if (success) { totalBalance += balance; + } else if ( + networks[i] == Web3Networks.Bsc || + networks[i] == Web3Networks.Ethereum + ) { + (bool success, uint256 balance) = NoderealClient + .getTokenBalance( + url, + secrets, + _tokenContractAddress, + identityString + ); + if (success) { + totalBalance += balance; + } } // Mark this network as queried - queriedNetworks[network] = true; + queriedNetworks[networks[i]] = true; } } return totalBalance; @@ -83,17 +102,12 @@ abstract contract ERC20 is TokenHoldingAmount { return 0; } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - // Add more networks as needed - return networks; - } - function isSupportedNetwork( uint32 network ) internal pure override returns (bool) { - return network == Web3Networks.Bsc || network == Web3Networks.Ethereum; + return + network == Web3Networks.Bsc || + network == Web3Networks.Ethereum || + network == Web3Networks.BitcoinP2tr; } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Btcs.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Btcs.sol index 2561eff47e..2f3b309b16 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Btcs.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Btcs.sol @@ -18,29 +18,30 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Btcs is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Btcs { + function getTokenName() internal pure returns (string memory) { return "btcs"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 5 * decimals_factor; - ranges[3] = 20 * decimals_factor; - ranges[4] = 50 * decimals_factor; - ranges[5] = 100 * decimals_factor; - ranges[6] = 200 * decimals_factor; - ranges[7] = 500 * decimals_factor; - ranges[8] = 800 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 100 * Constants.decimals_factor; + ranges[6] = 200 * Constants.decimals_factor; + ranges[7] = 500 * Constants.decimals_factor; + ranges[8] = 800 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Cats.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Cats.sol index 06f1722061..0a4b5cb31f 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Cats.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Cats.sol @@ -18,28 +18,29 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Cats is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Cats { + function getTokenName() internal pure returns (string memory) { return "cats"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 10000 * decimals_factor; - ranges[3] = 50000 * decimals_factor; - ranges[4] = 100000 * decimals_factor; - ranges[5] = 200000 * decimals_factor; - ranges[6] = 500000 * decimals_factor; - ranges[7] = 800000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 10000 * Constants.decimals_factor; + ranges[3] = 50000 * Constants.decimals_factor; + ranges[4] = 100000 * Constants.decimals_factor; + ranges[5] = 200000 * Constants.decimals_factor; + ranges[6] = 500000 * Constants.decimals_factor; + ranges[7] = 800000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Long.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Long.sol index 38d0ef567a..60fbef5852 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Long.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Long.sol @@ -18,29 +18,30 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Long is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Long { + function getTokenName() internal pure returns (string memory) { return "long"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 20 * decimals_factor; - ranges[3] = 50 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 1000 * decimals_factor; - ranges[7] = 2000 * decimals_factor; - ranges[8] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 20 * Constants.decimals_factor; + ranges[3] = 50 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Mmss.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Mmss.sol index 41b363c117..37dc39493a 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Mmss.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Mmss.sol @@ -18,29 +18,30 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Mmss is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Mmss { + function getTokenName() internal pure returns (string memory) { return "mmss"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 20 * decimals_factor; - ranges[3] = 50 * decimals_factor; - ranges[4] = 100 * decimals_factor; - ranges[5] = 200 * decimals_factor; - ranges[6] = 500 * decimals_factor; - ranges[7] = 1000 * decimals_factor; - ranges[8] = 2000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 20 * Constants.decimals_factor; + ranges[3] = 50 * Constants.decimals_factor; + ranges[4] = 100 * Constants.decimals_factor; + ranges[5] = 200 * Constants.decimals_factor; + ranges[6] = 500 * Constants.decimals_factor; + ranges[7] = 1000 * Constants.decimals_factor; + ranges[8] = 2000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Ordi.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Ordi.sol index 53c5b4e280..a9e520015a 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Ordi.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Ordi.sol @@ -18,28 +18,29 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Ordi is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Ordi { + function getTokenName() internal pure returns (string memory) { return "ordi"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 5 * decimals_factor; - ranges[3] = 20 * decimals_factor; - ranges[4] = 50 * decimals_factor; - ranges[5] = 100 * decimals_factor; - ranges[6] = 200 * decimals_factor; - ranges[7] = 500 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 100 * Constants.decimals_factor; + ranges[6] = 200 * Constants.decimals_factor; + ranges[7] = 500 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Rats.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Rats.sol index 8044dd1330..9ea1bd83f3 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Rats.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Rats.sol @@ -18,29 +18,30 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Rats is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Rats { + function getTokenName() internal pure returns (string memory) { return "rats"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 40000 * decimals_factor; - ranges[3] = 200000 * decimals_factor; - ranges[4] = 1000000 * decimals_factor; - ranges[5] = 2000000 * decimals_factor; - ranges[6] = 4000000 * decimals_factor; - ranges[7] = 10000000 * decimals_factor; - ranges[8] = 2000000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 40000 * Constants.decimals_factor; + ranges[3] = 200000 * Constants.decimals_factor; + ranges[4] = 1000000 * Constants.decimals_factor; + ranges[5] = 2000000 * Constants.decimals_factor; + ranges[6] = 4000000 * Constants.decimals_factor; + ranges[7] = 10000000 * Constants.decimals_factor; + ranges[8] = 2000000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Sats.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Sats.sol index cb6671f010..27f6772425 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Sats.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/brc20/Sats.sol @@ -18,29 +18,30 @@ pragma solidity ^0.8.8; -import { BRC20 } from "../BRC20.sol"; +import "../Constants.sol"; +import "../../libraries/Identities.sol"; -contract Sats is BRC20 { - function getTokenName() internal pure override returns (string memory) { +library Sats { + function getTokenName() internal pure returns (string memory) { return "sats"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 40000000 * decimals_factor; - ranges[3] = 200000000 * decimals_factor; - ranges[4] = 500000000 * decimals_factor; - ranges[5] = 1000000000 * decimals_factor; - ranges[6] = 2000000000 * decimals_factor; - ranges[7] = 4000000000 * decimals_factor; - ranges[8] = 6000000000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 40000000 * Constants.decimals_factor; + ranges[3] = 200000000 * Constants.decimals_factor; + ranges[4] = 500000000 * Constants.decimals_factor; + ranges[5] = 1000000000 * Constants.decimals_factor; + ranges[6] = 2000000000 * Constants.decimals_factor; + ranges[7] = 4000000000 * Constants.decimals_factor; + ranges[8] = 6000000000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](1); + networks[0] = Web3Networks.BitcoinP2tr; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ada.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ada.sol index ff4c7df5fe..36e21a30bc 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ada.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ada.sol @@ -17,40 +17,37 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +library Ada { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47"; + } -contract Ada is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47"; - // Add more addresses as needed + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "ada"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1000 * decimals_factor; - ranges[2] = 5000 * decimals_factor; - ranges[3] = 20000* decimals_factor; - ranges[4] = 50000 * decimals_factor; - ranges[5] = 100000 * decimals_factor; - ranges[6] = 300000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Amp.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Amp.sol index 80a60f0601..71547c6643 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Amp.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Amp.sol @@ -17,43 +17,42 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Amp is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xff20817765cb7f73d4bde2e66e067e58d11095c2"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Amp { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xff20817765cb7f73d4bde2e66e067e58d11095c2"; + } + + function getTokenName() internal pure returns (string memory) { return "amp"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Atom.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Atom.sol index 8fc38c8bf8..7b3680c958 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Atom.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Atom.sol @@ -18,39 +18,38 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Atom is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x8D983cb9388EaC77af0474fA441C4815500Cb7BB"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x0eb3a705fc54725037cc9e008bdede697f62f335"; - // Add more addresses as needed +library Atom { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x0eb3a705fc54725037cc9e008bdede697f62f335"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x8D983cb9388EaC77af0474fA441C4815500Cb7BB"; + } + + function getTokenName() internal pure returns (string memory) { return "atom"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 5 * decimals_factor; - ranges[3] = 20 * decimals_factor; - ranges[4] = 50 * decimals_factor; - ranges[5] = 80 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bch.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bch.sol index 64f2f107fe..b5e00e0238 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bch.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bch.sol @@ -18,34 +18,25 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; +import "../Constants.sol"; import "../../libraries/Identities.sol"; -contract Bch is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x8fF795a6F4D97E7887C79beA79aba5cc76444aDf"; - // Add more addresses as needed +library Bch { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x8fF795a6F4D97E7887C79beA79aba5cc76444aDf"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; + } + function getTokenName() internal pure returns (string memory) { return "bch"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - // all ranges multiplied by decimals_factor(1000). + // all ranges multiplied by decimals_factor(1000). // pub const BCH_AMOUNT_RANGE: [f64; 6] = [0.0, 0.1, 0.5, 2.0, 6.0, 12.0]; ranges[0] = 0; @@ -57,4 +48,11 @@ contract Bch is ERC20 { return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bean.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bean.sol index 775173717a..df88fe1494 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bean.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bean.sol @@ -18,38 +18,34 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Bean is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xba7b9936a965fac23bb7a8190364fa60622b3cff"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x07da81e9a684ab87fad7206b3bc8d0866f48cc7c"; - // Add more addresses as needed +library Bean { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x07da81e9a684ab87fad7206b3bc8d0866f48cc7c"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xba7b9936a965fac23bb7a8190364fa60622b3cff"; + } + function getTokenName() internal pure returns (string memory) { return "bean"; } - - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](5); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1500 * decimals_factor; - ranges[2] = 5000 * decimals_factor; - ranges[3] = 10000 * decimals_factor; - ranges[4] = 50000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1500 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 10000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bnb.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bnb.sol index e37303e54a..9c5a523d86 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bnb.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Bnb.sol @@ -18,40 +18,40 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Bnb is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xb8c77482e45f1f44de1745f52c74426c631bdd52"; - networkTokenAddresses[Web3Networks.Bsc] = "Native Token"; - // Add more addresses as needed +library Bnb { + function getTokenBscAddress() internal pure returns (string memory) { + return "Native Token"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xb8c77482e45f1f44de1745f52c74426c631bdd52"; + } + function getTokenName() internal pure returns (string memory) { return "bnb"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Comp.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Comp.sol index adf3514f54..0d3d105b84 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Comp.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Comp.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Comp is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xc00e94cb662c3520282e6f5717214004a7f26888"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Comp { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xc00e94cb662c3520282e6f5717214004a7f26888"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "comp"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cro.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cro.sol index 549629fcad..fbbdc70329 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cro.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cro.sol @@ -18,40 +18,38 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Cro is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Cro { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "cro"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1000 * decimals_factor; - ranges[2] = 5000 * decimals_factor; - ranges[3] = 20000 * decimals_factor; - ranges[4] = 50000 * decimals_factor; - ranges[5] = 100000 * decimals_factor; - ranges[6] = 300000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Crv.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Crv.sol index 256d10231c..d994331a1c 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Crv.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Crv.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Crv is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xdac17f958d2ee523a2206206994597c13d831ec7"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Crv { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xdac17f958d2ee523a2206206994597c13d831ec7"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "crv"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cvx.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cvx.sol index 1418959de2..dace7238e4 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cvx.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Cvx.sol @@ -18,43 +18,40 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Cvx is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Cvx { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b"; + } + function getTokenName() internal pure returns (string memory) { return "cvx"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dai.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dai.sol index 04699e4d06..3ba6f18939 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dai.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dai.sol @@ -18,42 +18,40 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Dai is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x6b175474e89094c44da98b954eedeac495271d0f"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3"; - // Add more addresses as needed +library Dai { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x6b175474e89094c44da98b954eedeac495271d0f"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "dai"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 1000 * decimals_factor; - ranges[7] = 2000 * decimals_factor; - ranges[8] = 5000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Doge.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Doge.sol index c19fb5f5c5..8e34521a69 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Doge.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Doge.sol @@ -17,40 +17,38 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Doge is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xba2ae424d960c26247dd6c32edc70b295c744c43"; - // Add more addresses as needed +library Doge { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xba2ae424d960c26247dd6c32edc70b295c744c43"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "doge"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1000 * decimals_factor; - ranges[2] = 5000 * decimals_factor; - ranges[3] = 20000 * decimals_factor; - ranges[4] = 50000 * decimals_factor; - ranges[5] = 100000 * decimals_factor; - ranges[6] = 300000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dydx.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dydx.sol index e4b949881f..ade6482c90 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dydx.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Dydx.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Dydx is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x92d6c1e31e14520e676a687f0a93788b716beff5"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Dydx { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x92d6c1e31e14520e676a687f0a93788b716beff5"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "dydx"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Etc.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Etc.sol index a5cc9e1d66..6afa9e119c 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Etc.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Etc.sol @@ -18,39 +18,37 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Etc is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x3d6545b08693dae087e957cb1180ee38b9e3c25e"; - // Add more addresses as needed +library Etc { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x3d6545b08693dae087e957cb1180ee38b9e3c25e"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "etc"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 5 * decimals_factor; - ranges[3] = 20 * decimals_factor; - ranges[4] = 50 * decimals_factor; - ranges[5] = 80 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Eth.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Eth.sol index 39d4ff212f..04c04d1b9f 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Eth.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Eth.sol @@ -18,29 +18,21 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; -contract Eth is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[Web3Networks.Ethereum] = "Native Token"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x2170ed0880ac9a755fd29b2688956bd959f933f8"; - // Add more addresses as needed +library Eth { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x2170ed0880ac9a755fd29b2688956bd959f933f8"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "Native Token"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "eth"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); // all ranges multiplied by decimals_factor(1000). @@ -58,4 +50,11 @@ contract Eth is ERC20 { return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Fil.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Fil.sol index 96c99dbb85..66f0187011 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Fil.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Fil.sol @@ -18,39 +18,37 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Fil is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153"; - // Add more addresses as needed +library Fil { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "fil"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Grt.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Grt.sol index 2dc1f0509b..488afad488 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Grt.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Grt.sol @@ -17,43 +17,41 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Grt is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xc944e90c64b2c07662a292be6244bdf05cda44a7"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x52ce071bd9b1c4b00a0b92d298c512478cad67e8"; - // Add more addresses as needed +library Grt { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x52ce071bd9b1c4b00a0b92d298c512478cad67e8"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xc944e90c64b2c07662a292be6244bdf05cda44a7"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "grt"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gtc.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gtc.sol index e3dde8d255..2e7e3f2ac9 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gtc.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gtc.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Gtc is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Gtc { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "gtc"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gusd.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gusd.sol index d2701f605d..fdb4e12302 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gusd.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Gusd.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Gusd is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Gusd { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "gusd"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Imx.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Imx.sol index 6dc12e1b7e..bd03d62f2f 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Imx.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Imx.sol @@ -18,41 +18,39 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Imx is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xf57e7e7c23978c3caec3c3548e3d615c346e79ff"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Imx { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xf57e7e7c23978c3caec3c3548e3d615c346e79ff"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "imx"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 1000 * decimals_factor; - ranges[7] = 2000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Inj.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Inj.sol index c6459614bf..fd39b68c89 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Inj.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Inj.sol @@ -18,39 +18,37 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Inj is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Inj { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "inj"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 5 * decimals_factor; - ranges[3] = 20 * decimals_factor; - ranges[4] = 50 * decimals_factor; - ranges[5] = 80 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Leo.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Leo.sol index e027aed06f..6de696e0af 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Leo.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Leo.sol @@ -18,39 +18,37 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Leo is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Leo { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "leo"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Link.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Link.sol index 7a02565e3f..b66846b83a 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Link.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Link.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Link is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x514910771af9ca656af840dff83e8264ecf986ca"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd"; - // Add more addresses as needed +library Link { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x514910771af9ca656af840dff83e8264ecf986ca"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "link"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Lit.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Lit.sol index 72a32f0924..955bbd1744 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Lit.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Lit.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Lit is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; - // Add more addresses as needed +library Lit { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "lit"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Matic.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Matic.sol index 35e5a314a4..c6ca4f0993 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Matic.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Matic.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Matic is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xcc42724c6683b7e57334c4e856f4c9965ed682bd"; - // Add more addresses as needed +library Matic { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xcc42724c6683b7e57334c4e856f4c9965ed682bd"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "matic"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Mcrt.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Mcrt.sol index 3050a42dad..47e8e76c35 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Mcrt.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Mcrt.sol @@ -18,39 +18,36 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Mcrt is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xde16ce60804a881e9f8c4ebb3824646edecd478d"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x4b8285aB433D8f69CB48d5Ad62b415ed1a221e4f"; - // Add more addresses as needed +library Mcrt { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x4b8285aB433D8f69CB48d5Ad62b415ed1a221e4f"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xde16ce60804a881e9f8c4ebb3824646edecd478d"; + } + function getTokenName() internal pure returns (string memory) { return "mcrt"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * decimals_factor; - ranges[1] = 2000 * decimals_factor; - ranges[2] = 10000 * decimals_factor; - ranges[3] = 50000 * decimals_factor; - ranges[4] = 150000 * decimals_factor; - ranges[5] = 500000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 2000 * Constants.decimals_factor; + ranges[2] = 10000 * Constants.decimals_factor; + ranges[3] = 50000 * Constants.decimals_factor; + ranges[4] = 150000 * Constants.decimals_factor; + ranges[5] = 500000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Nfp.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Nfp.sol index 64e1de924c..6c726f56c0 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Nfp.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Nfp.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Nfp is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = ""; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x75e8ddb518bb757b4282cd5b83bb70d4101d12fb"; - // Add more addresses as needed +library Nfp { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x75e8ddb518bb757b4282cd5b83bb70d4101d12fb"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "nfp"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/People.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/People.sol index e8e324ef9c..63d24c437c 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/People.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/People.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract People is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x7a58c0be72be218b41c608b7fe7c5bb630736c71"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library People { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x7a58c0be72be218b41c608b7fe7c5bb630736c71"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "people"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Shib.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Shib.sol index 4f99b35c4f..03450855ce 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Shib.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Shib.sol @@ -18,41 +18,39 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Shib is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Shib { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "shib"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * decimals_factor; - ranges[1] = 400000 * decimals_factor; - ranges[2] = 2000000 * decimals_factor; - ranges[3] = 10000000 * decimals_factor; - ranges[4] = 20000000 * decimals_factor; - ranges[5] = 40000000 * decimals_factor; - ranges[6] = 100000000 * decimals_factor; - ranges[7] = 200000000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 400000 * Constants.decimals_factor; + ranges[2] = 2000000 * Constants.decimals_factor; + ranges[3] = 10000000 * Constants.decimals_factor; + ranges[4] = 20000000 * Constants.decimals_factor; + ranges[5] = 40000000 * Constants.decimals_factor; + ranges[6] = 100000000 * Constants.decimals_factor; + ranges[7] = 200000000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Sol.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Sol.sol index e360f97381..79a69b85d7 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Sol.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Sol.sol @@ -18,42 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Sol is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x5288738df1aeb0894713de903e1d0c001eeb7644"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x570a5d26f7765ecb712c0924e4de545b89fd43df"; - // Add more addresses as needed +library Sol { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x570a5d26f7765ecb712c0924e4de545b89fd43df"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x5288738df1aeb0894713de903e1d0c001eeb7644"; + } + + function getTokenName() internal pure returns (string memory) { return "sol"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/SpaceId.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/SpaceId.sol index fe54df714a..8579e1f43a 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/SpaceId.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/SpaceId.sol @@ -18,42 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract SpaceId is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x2dff88a56767223a5529ea5960da7a3f5f766406"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x2dff88a56767223a5529ea5960da7a3f5f766406"; - // Add more addresses as needed +library SpaceId { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x2dff88a56767223a5529ea5960da7a3f5f766406"; } - function getTokenName() internal pure override returns (string memory) { - return "SpaceId"; + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x2dff88a56767223a5529ea5960da7a3f5f766406"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenName() internal pure returns (string memory) { + return "spaceid"; + } + + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ton.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ton.sol index 3c5fdd7e58..1bb62a4482 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ton.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Ton.sol @@ -18,42 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Ton is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x582d872a1b094fc48f5de31d3b73f2d9be47def1"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x76a797a59ba2c17726896976b7b3747bfd1d220f"; - // Add more addresses as needed +library Ton { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x76a797a59ba2c17726896976b7b3747bfd1d220f"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x582d872a1b094fc48f5de31d3b73f2d9be47def1"; + } + + function getTokenName() internal pure returns (string memory) { return "ton"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Trx.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Trx.sol index 7da1d4d77a..0329108a72 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Trx.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Trx.sol @@ -18,42 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Trx is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x50327c6c5a14dcade707abad2e27eb517df87ab5"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xCE7de646e7208a4Ef112cb6ed5038FA6cC6b12e3"; - // Add more addresses as needed +library Trx { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xCE7de646e7208a4Ef112cb6ed5038FA6cC6b12e3"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x50327c6c5a14dcade707abad2e27eb517df87ab5"; + } + + function getTokenName() internal pure returns (string memory) { return "trx"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Tusd.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Tusd.sol index 3521a0f063..cc26b63c58 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Tusd.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Tusd.sol @@ -18,43 +18,40 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Tusd is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x0000000000085d4780b73119b644ae5ecd22b376"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9"; - // Add more addresses as needed +library Tusd { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x0000000000085d4780b73119b644ae5ecd22b376"; + } + function getTokenName() internal pure returns (string memory) { return "tusd"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Uni.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Uni.sol index 4a13b94362..9a5c0ef047 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Uni.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Uni.sol @@ -18,42 +18,39 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Uni is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xbf5140a22578168fd562dccf235e5d43a02ce9b1"; - // Add more addresses as needed +library Uni { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xbf5140a22578168fd562dccf235e5d43a02ce9b1"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984"; + } + function getTokenName() internal pure returns (string memory) { return "uni"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 1000 * decimals_factor; - ranges[7] = 2000 * decimals_factor; - ranges[8] = 5000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdc.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdc.sol index c256b4a822..6fc3e503b3 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdc.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdc.sol @@ -2,42 +2,39 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Usdc is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"; - // Add more addresses as needed +library Usdc { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; + } + function getTokenName() internal pure returns (string memory) { return "usdc"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * decimals_factor; - ranges[1] = 10 * decimals_factor; - ranges[2] = 30 * decimals_factor; - ranges[3] = 80 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 1000 * decimals_factor; - ranges[7] = 2000 * decimals_factor; - ranges[8] = 5000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdd.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdd.sol index 6f8cb8fd33..8543184fd4 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdd.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdd.sol @@ -18,43 +18,40 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Usdd is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x0c10bf8fcb7bf5412187a595ab97a3609160b5c6"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0xd17479997f34dd9156deef8f95a52d81d265be9c"; - // Add more addresses as needed +library Usdd { + function getTokenBscAddress() internal pure returns (string memory) { + return "0xd17479997f34dd9156deef8f95a52d81d265be9c"; } - - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x0c10bf8fcb7bf5412187a595ab97a3609160b5c6"; + } + function getTokenName() internal pure returns (string memory) { return "usdd"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdt.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdt.sol index 245c4e8f5b..acdb77a198 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdt.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Usdt.sol @@ -18,43 +18,41 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; -contract Usdt is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0xdac17f958d2ee523a2206206994597c13d831ec7"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = "0x55d398326f99059ff775485246999027b3197955"; - // Add more addresses as needed +library Usdt { + function getTokenBscAddress() internal pure returns (string memory) { + return "0x55d398326f99059ff775485246999027b3197955"; + } + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0xdac17f958d2ee523a2206206994597c13d831ec7"; } - function getTokenName() internal pure override returns (string memory) { + function getTokenName() internal pure returns (string memory) { return "usdt"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * decimals_factor; - ranges[1] = 1 * decimals_factor; - ranges[2] = 50 * decimals_factor; - ranges[3] = 100 * decimals_factor; - ranges[4] = 200 * decimals_factor; - ranges[5] = 500 * decimals_factor; - ranges[6] = 800 * decimals_factor; - ranges[7] = 1200 * decimals_factor; - ranges[8] = 1600 * decimals_factor; - ranges[9] = 3000 * decimals_factor; + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Wbtc.sol b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Wbtc.sol index 0ca143dce1..c6e3600df7 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Wbtc.sol +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/contracts/token_holding_amount/erc20/Wbtc.sol @@ -18,34 +18,24 @@ pragma solidity ^0.8.8; -import { ERC20 } from "../ERC20.sol"; import "../../libraries/Identities.sol"; -contract Wbtc is ERC20 { - constructor() { - // Initialize network token addresses - networkTokenAddresses[ - Web3Networks.Ethereum - ] = "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; - networkTokenAddresses[ - Web3Networks.Bsc - ] = ""; - // Add more addresses as needed +library Wbtc { + function getTokenBscAddress() internal pure returns (string memory) { + return ""; } - function getTokenName() internal pure override returns (string memory) { + function getTokenEthereumAddress() internal pure returns (string memory) { + return "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; + } + function getTokenName() internal pure returns (string memory) { return "wbtc"; } - function getTokenRanges() - internal - pure - override - returns (uint256[] memory) - { + function getTokenRanges() internal pure returns (uint256[] memory) { uint256[] memory ranges = new uint256[](14); // all ranges multiplied by decimals_factor(1000). - // pub const BTC_AMOUNT_RANGE: [f64; 14] =[0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0]; + // pub const BTC_AMOUNT_RANGE: [f64; 14] =[0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0]; ranges[0] = 0; ranges[1] = 1; ranges[2] = 100; @@ -63,4 +53,11 @@ contract Wbtc is ERC20 { return ranges; } + function getTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](2); + networks[0] = Web3Networks.Ethereum; + networks[1] = Web3Networks.Bsc; + + return networks; + } } diff --git a/tee-worker/litentry/core/assertion-build/src/dynamic/repository.rs b/tee-worker/litentry/core/assertion-build/src/dynamic/repository.rs index e2c386bea3..7e6a613782 100644 --- a/tee-worker/litentry/core/assertion-build/src/dynamic/repository.rs +++ b/tee-worker/litentry/core/assertion-build/src/dynamic/repository.rs @@ -73,30 +73,11 @@ impl InMemorySmartContractRepo { map.insert( hash(3), ( - hex::decode("608060405234801561001057600080fd5b50612840806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b4e4c68514610030575b600080fd5b61004a60048036038101906100459190611951565b610064565b60405161005b959493929190611ba7565b60405180910390f35b6060806060806000806040518060600160405280603081526020016127db60309139905060006040518060400160405280601481526020017f546f6b656e20486f6c64696e6720416d6f756e7400000000000000000000000081525090506040518060a00160405280606d815260200161276e606d9139600090805190602001906100f09291906112de565b5060006100fd8b8b6101e2565b9050600080600061010d846102ba565b925092509250600061011f838361041e565b90506000808511806101315750600086115b905087878360008481805461014590611c45565b80601f016020809104026020016040519081016040528092919081815260200182805461017190611c45565b80156101be5780601f10610193576101008083540402835291602001916101be565b820191906000526020600020905b8154815290600101906020018083116101a157829003601f168201915b505050505091509c509c509c509c509c505050505050505050939792965093509350565b6000806000905060008451905060005b818110156102ae57600086828151811061020f5761020e611c77565b5b602002602001015190506000816040015151905060005b818163ffffffff16101561029857600083604001518263ffffffff168151811061025357610252611c77565b5b60200260200101519050610266816105ea565b156102845761027684828b610603565b876102819190611cdf565b96505b50808061029090611d35565b915050610226565b50505080806102a690611d62565b9150506101f2565b50819250505092915050565b6000806000806102c86107bb565b90506000600182516102da9190611dab565b90506000806000600190505b84518163ffffffff161015610368576102fd610923565b600a6103099190611f1f565b858263ffffffff168151811061032257610321611c77565b5b60200260200101516103349190611f6a565b891015610355576001816103489190611fc4565b63ffffffff169350610368565b808061036090611d35565b9150506102e6565b50600184516103779190611dab565b8314156103c35783838151811061039157610390611c77565b5b602002602001015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905061040a565b8383815181106103d6576103d5611c77565b5b60200260200101519150836001846103ee9190611cdf565b815181106103ff576103fe611c77565b5b602002602001015190505b828282965096509650505050509193909250565b606060006040518060400160405280600f81526020017f24686f6c64696e675f616d6f756e74000000000000000000000000000000000081525090506000604051806040016040528060008613610476576002610479565b60035b60ff1667ffffffffffffffff81111561049557610494611414565b5b6040519080825280602002602001820160405280156104ce57816020015b6104bb611364565b8152602001906001900390816104b35790505b5081526020016001151581525090506105288160006040518060400160405280600681526020017f24746f6b656e0000000000000000000000000000000000000000000000000000815250600461052361092c565b610969565b5061054081600184600261053b8a61099b565b610969565b5060008413156105635761056181600284600161055c89610a73565b610969565b505b6000600167ffffffffffffffff8111156105805761057f611414565b5b6040519080825280602002602001820160405280156105b357816020015b606081526020019060019003908161059e5790505b5090506105bf82610b01565b816000815181106105d3576105d2611c77565b5b602002602001018190525080935050505092915050565b6000600963ffffffff168263ffffffff16149050919050565b6000806000610616858760200151610cd1565b9150915081156107ad57600061062a61092c565b8260405160200161063c92919061213e565b60405160208183030381529060405290506000600167ffffffffffffffff81111561066a57610669611414565b5b6040519080825280602002602001820160405280156106a357816020015b610690611397565b8152602001906001900390816106885790505b50905060405180604001604052806040518060400160405280600781526020017f6170692d6b657900000000000000000000000000000000000000000000000000815250815260200187600081518110610700576106ff611c77565b5b60200260200101518152508160008151811061071f5761071e611c77565b5b602002602001018190525060008061076d846040518060400160405280601e81526020017f2f646174612f6c6973742f302f617661696c61626c655f62616c616e6365000081525085610d3a565b9150915081156107a85760008061078b83610786610923565b610db3565b9150915081156107a55780985050505050505050506107b4565b50505b505050505b6000925050505b9392505050565b60606000600867ffffffffffffffff8111156107da576107d9611414565b5b6040519080825280602002602001820160405280156108085781602001602082028036833780820191505090505b50905060008160008151811061082157610820611c77565b5b60200260200101818152505060018160018151811061084357610842611c77565b5b60200260200101818152505060058160028151811061086557610864611c77565b5b60200260200101818152505060148160038151811061088757610886611c77565b5b6020026020010181815250506032816004815181106108a9576108a8611c77565b5b6020026020010181815250506064816005815181106108cb576108ca611c77565b5b60200260200101818152505060c8816006815181106108ed576108ec611c77565b5b6020026020010181815250506101f4816007815181106109105761090f611c77565b5b6020026020010181815250508091505090565b60006012905090565b60606040518060400160405280600481526020017f6f72646900000000000000000000000000000000000000000000000000000000815250905090565b6109716113b1565b61097e8686868686610e1b565b600186602001901515908115158152505085905095945050505050565b6060600060016109aa84610e71565b01905060008167ffffffffffffffff8111156109c9576109c8611414565b5b6040519080825280601f01601f1916602001820160405280156109fb5781602001600182028036833780820191505090505b509050600082602001820190505b600115610a68578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610a5257610a51612183565b5b0494506000851415610a6357610a68565b610a09565b819350505050919050565b606060008212610a925760405180602001604052806000815250610ac9565b6040518060400160405280600181526020017f2d000000000000000000000000000000000000000000000000000000000000008152505b610ada610ad584610fc4565b61099b565b604051602001610aeb9291906121b2565b6040516020818303038152906040529050919050565b606060006040518060400160405280600181526020017f7b00000000000000000000000000000000000000000000000000000000000000815250905060008360000151511115610ca657808360200151610b90576040518060400160405280600681526020017f226f72223a5b0000000000000000000000000000000000000000000000000000815250610bc7565b6040518060400160405280600781526020017f22616e64223a5b000000000000000000000000000000000000000000000000008152505b604051602001610bd89291906121b2565b604051602081830303815290604052905060005b836000015151811015610c82576000811115610c255781604051602001610c139190612222565b60405160208183030381529060405291505b81610c4d85600001518381518110610c4057610c3f611c77565b5b6020026020010151610fe0565b604051602001610c5e9291906121b2565b60405160208183030381529060405291508080610c7a90611d62565b915050610bec565b5080604051602001610c949190612290565b60405160208183030381529060405290505b80604051602001610cb791906122fe565b604051602081830303815290604052905080915050919050565b6000606060008484604051602001610cea929190612384565b6040516020818303038152906040529050600081519050604051611000818360208601600061041c600019f1610d1f57600080fd5b80945060408101935061100081016040525050509250929050565b60006060600060606000878787604051602001610d59939291906124ba565b604051602081830303815290604052905060008151905060405161100081836020860160006103ea600019f1610d8e57600080fd5b8051945060408101935061100081016040525083839550955050505050935093915050565b60008060008484604051602001610dcb929190612515565b60405160208183030381529060405290506000815190506040516082818360208601600061041e600019f1610dff57600080fd5b8051945060208101519350608281016040525050509250929050565b6040518060600160405280848152602001836005811115610e3f57610e3e612545565b5b81526020018281525085600001518581518110610e5f57610e5e611c77565b5b60200260200101819052505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610ecf577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381610ec557610ec4612183565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310610f0c576d04ee2d6d415b85acef81000000008381610f0257610f01612183565b5b0492506020810190505b662386f26fc100008310610f3b57662386f26fc100008381610f3157610f30612183565b5b0492506010810190505b6305f5e1008310610f64576305f5e1008381610f5a57610f59612183565b5b0492506008810190505b6127108310610f89576127108381610f7f57610f7e612183565b5b0492506004810190505b60648310610fac5760648381610fa257610fa1612183565b5b0492506002810190505b600a8310610fbb576001810190505b80915050919050565b600080821215610fd75781600003610fd9565b815b9050919050565b60608160000151610ff48360200151611021565b836040015160405160200161100b939291906126a4565b6040516020818303038152906040529050919050565b60606004600581111561103757611036612545565b5b82600581111561104a57611049612545565b5b141561108d576040518060400160405280600281526020017f3d3d00000000000000000000000000000000000000000000000000000000000081525090506112d9565b600060058111156110a1576110a0612545565b5b8260058111156110b4576110b3612545565b5b14156110f7576040518060400160405280600181526020017f3e0000000000000000000000000000000000000000000000000000000000000081525090506112d9565b6001600581111561110b5761110a612545565b5b82600581111561111e5761111d612545565b5b1415611161576040518060400160405280600181526020017f3c0000000000000000000000000000000000000000000000000000000000000081525090506112d9565b6002600581111561117557611174612545565b5b82600581111561118857611187612545565b5b14156111cb576040518060400160405280600281526020017f3e3d00000000000000000000000000000000000000000000000000000000000081525090506112d9565b600360058111156111df576111de612545565b5b8260058111156111f2576111f1612545565b5b1415611235576040518060400160405280600281526020017f3c3d00000000000000000000000000000000000000000000000000000000000081525090506112d9565b60058081111561124857611247612545565b5b82600581111561125b5761125a612545565b5b141561129e576040518060400160405280600281526020017f213d00000000000000000000000000000000000000000000000000000000000081525090506112d9565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d09061274d565b60405180910390fd5b919050565b8280546112ea90611c45565b90600052602060002090601f01602090048101928261130c5760008555611353565b82601f1061132557805160ff1916838001178555611353565b82800160010185558215611353579182015b82811115611352578251825591602001919060010190611337565b5b50905061136091906113cd565b5090565b6040518060600160405280606081526020016000600581111561138a57611389612545565b5b8152602001606081525090565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020016000151581525090565b5b808211156113e65760008160009055506001016113ce565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61144c82611403565b810181811067ffffffffffffffff8211171561146b5761146a611414565b5b80604052505050565b600061147e6113ea565b905061148a8282611443565b919050565b600067ffffffffffffffff8211156114aa576114a9611414565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b6114e3816114ca565b81146114ee57600080fd5b50565b600081359050611500816114da565b92915050565b600080fd5b600067ffffffffffffffff82111561152657611525611414565b5b61152f82611403565b9050602081019050919050565b82818337600083830152505050565b600061155e6115598461150b565b611474565b90508281526020810184848401111561157a57611579611506565b5b61158584828561153c565b509392505050565b600082601f8301126115a2576115a16113fe565b5b81356115b284826020860161154b565b91505092915050565b600067ffffffffffffffff8211156115d6576115d5611414565b5b602082029050602081019050919050565b60006115fa6115f5846115bb565b611474565b9050808382526020820190506020840283018581111561161d5761161c6114bb565b5b835b81811015611646578061163288826114f1565b84526020840193505060208101905061161f565b5050509392505050565b600082601f830112611665576116646113fe565b5b81356116758482602086016115e7565b91505092915050565b600060608284031215611694576116936114c0565b5b61169e6060611474565b905060006116ae848285016114f1565b600083015250602082013567ffffffffffffffff8111156116d2576116d16114c5565b5b6116de8482850161158d565b602083015250604082013567ffffffffffffffff811115611702576117016114c5565b5b61170e84828501611650565b60408301525092915050565b600061172d6117288461148f565b611474565b905080838252602082019050602084028301858111156117505761174f6114bb565b5b835b8181101561179757803567ffffffffffffffff811115611775576117746113fe565b5b808601611782898261167e565b85526020850194505050602081019050611752565b5050509392505050565b600082601f8301126117b6576117b56113fe565b5b81356117c684826020860161171a565b91505092915050565b600067ffffffffffffffff8211156117ea576117e9611414565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561181657611815611414565b5b61181f82611403565b9050602081019050919050565b600061183f61183a846117fb565b611474565b90508281526020810184848401111561185b5761185a611506565b5b61186684828561153c565b509392505050565b600082601f830112611883576118826113fe565b5b813561189384826020860161182c565b91505092915050565b60006118af6118aa846117cf565b611474565b905080838252602082019050602084028301858111156118d2576118d16114bb565b5b835b8181101561191957803567ffffffffffffffff8111156118f7576118f66113fe565b5b808601611904898261186e565b855260208501945050506020810190506118d4565b5050509392505050565b600082601f830112611938576119376113fe565b5b813561194884826020860161189c565b91505092915050565b60008060006060848603121561196a576119696113f4565b5b600084013567ffffffffffffffff811115611988576119876113f9565b5b611994868287016117a1565b935050602084013567ffffffffffffffff8111156119b5576119b46113f9565b5b6119c186828701611923565b925050604084013567ffffffffffffffff8111156119e2576119e16113f9565b5b6119ee8682870161158d565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a32578082015181840152602081019050611a17565b83811115611a41576000848401525b50505050565b6000611a52826119f8565b611a5c8185611a03565b9350611a6c818560208601611a14565b611a7581611403565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000611ac8826119f8565b611ad28185611aac565b9350611ae2818560208601611a14565b611aeb81611403565b840191505092915050565b6000611b028383611abd565b905092915050565b6000602082019050919050565b6000611b2282611a80565b611b2c8185611a8b565b935083602082028501611b3e85611a9c565b8060005b85811015611b7a5784840389528151611b5b8582611af6565b9450611b6683611b0a565b925060208a01995050600181019050611b42565b50829750879550505050505092915050565b60008115159050919050565b611ba181611b8c565b82525050565b600060a0820190508181036000830152611bc18188611a47565b90508181036020830152611bd58187611a47565b90508181036040830152611be98186611b17565b90508181036060830152611bfd8185611a47565b9050611c0c6080830184611b98565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c5d57607f821691505b60208210811415611c7157611c70611c16565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cea82611ca6565b9150611cf583611ca6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d2a57611d29611cb0565b5b828201905092915050565b6000611d40826114ca565b915063ffffffff821415611d5757611d56611cb0565b5b600182019050919050565b6000611d6d82611ca6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611da057611d9f611cb0565b5b600182019050919050565b6000611db682611ca6565b9150611dc183611ca6565b925082821015611dd457611dd3611cb0565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115611e3657808604811115611e1257611e11611cb0565b5b6001851615611e215780820291505b8081029050611e2f85611ddf565b9450611df6565b94509492505050565b600082611e4f5760019050611f0b565b81611e5d5760009050611f0b565b8160018114611e735760028114611e7d57611eac565b6001915050611f0b565b60ff841115611e8f57611e8e611cb0565b5b8360020a915084821115611ea657611ea5611cb0565b5b50611f0b565b5060208310610133831016604e8410600b8410161715611ee15782820a905083811115611edc57611edb611cb0565b5b611f0b565b611eee8484846001611dec565b92509050818404811115611f0557611f04611cb0565b5b81810290505b9392505050565b600060ff82169050919050565b6000611f2a82611ca6565b9150611f3583611f12565b9250611f627fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611e3f565b905092915050565b6000611f7582611ca6565b9150611f8083611ca6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611fb957611fb8611cb0565b5b828202905092915050565b6000611fcf826114ca565b9150611fda836114ca565b925082821015611fed57611fec611cb0565b5b828203905092915050565b600081905092915050565b7f687474703a2f2f6c6f63616c686f73743a31393532392f6170692f312f62726360008201527f32302f62616c616e636500000000000000000000000000000000000000000000602082015250565b600061205f602a83611ff8565b915061206a82612003565b602a82019050919050565b7f3f7469636b3d0000000000000000000000000000000000000000000000000000600082015250565b60006120ab600683611ff8565b91506120b682612075565b600682019050919050565b60006120cc826119f8565b6120d68185611ff8565b93506120e6818560208601611a14565b80840191505092915050565b7f26616464726573733d0000000000000000000000000000000000000000000000600082015250565b6000612128600983611ff8565b9150612133826120f2565b600982019050919050565b600061214982612052565b91506121548261209e565b915061216082856120c1565b915061216b8261211b565b915061217782846120c1565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006121be82856120c1565b91506121ca82846120c1565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061220c600183611ff8565b9150612217826121d6565b600182019050919050565b600061222e82846120c1565b9150612239826121ff565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061227a600183611ff8565b915061228582612244565b600182019050919050565b600061229c82846120c1565b91506122a78261226d565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006122e8600183611ff8565b91506122f3826122b2565b600182019050919050565b600061230a82846120c1565b9150612315826122db565b915081905092915050565b612329816114ca565b82525050565b600081519050919050565b600082825260208201905092915050565b60006123568261232f565b612360818561233a565b9350612370818560208601611a14565b61237981611403565b840191505092915050565b60006040820190506123996000830185612320565b81810360208301526123ab818461234b565b90509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060408301600083015184820360008601526123fd8282611abd565b915050602083015184820360208601526124178282611abd565b9150508091505092915050565b600061243083836123e0565b905092915050565b6000602082019050919050565b6000612450826123b4565b61245a81856123bf565b93508360208202850161246c856123d0565b8060005b858110156124a857848403895281516124898582612424565b945061249483612438565b925060208a01995050600181019050612470565b50829750879550505050505092915050565b600060608201905081810360008301526124d48186611a47565b905081810360208301526124e88185611a47565b905081810360408301526124fc8184612445565b9050949350505050565b61250f81611f12565b82525050565b6000604082019050818103600083015261252f8185611a47565b905061253e6020830184612506565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f7b22737263223a22000000000000000000000000000000000000000000000000600082015250565b60006125aa600883611ff8565b91506125b582612574565b600882019050919050565b7f222c226f70223a22000000000000000000000000000000000000000000000000600082015250565b60006125f6600883611ff8565b9150612601826125c0565b600882019050919050565b7f222c22647374223a220000000000000000000000000000000000000000000000600082015250565b6000612642600983611ff8565b915061264d8261260c565b600982019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061268e600283611ff8565b915061269982612658565b600282019050919050565b60006126af8261259d565b91506126bb82866120c1565b91506126c6826125e9565b91506126d282856120c1565b91506126dd82612635565b91506126e982846120c1565b91506126f482612681565b9150819050949350505050565b7f556e737570706f72746564206f70657261746f72000000000000000000000000600082015250565b6000612737601483611a03565b915061274282612701565b602082019050919050565b600060208201905081810360008301526127668161272a565b905091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6c6974656e7472792f76632d6a736f6e736368656d612f6d61696e2f646973742f736368656d61732f32352d746f6b656e2d686f6c64696e672d616d6f756e742f312d312d302e6a736f6e54686520616d6f756e74206f66206120706172746963756c617220746f6b656e20796f752061726520686f6c64696e67a26469706673582212208912a01f10c4fd5b37c2f5b41c01229b784d1e17b0ff05da1d0f15b20e1c75ab64736f6c634300080b0033").unwrap(), - vec!["geniidata_api_key".to_string()] + hex::decode("6080604052348015630000001257600080fd5b50604051806060016040528060288152602001630001d3466028913960036000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000065929190630000efc6565b50604051806060016040528060288152602001630001d3466028913960036000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000000b8929190630000efc6565b506040518060600160405280602a8152602001630001d512602a913960036000600963ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000010b929190630000efc6565b5063000001246300004db760201b63000004601760201c565b6001604051630000013690630000f1f7565b90815260200160405180910390209080519060200190630000015b929190630000efc6565b5063000001746300004df460201b630000049d1760201c565b6002604051630000018690630000f1f7565b9081526020016040518091039020908051906020019063000001ab929190630000f062565b5063000001c4630000505660201b630000069d1760201c565b600860405163000001d690630000f1f7565b9081526020016040518091039020908051906020019063000001fb929190630000f0b9565b50630000021463000050eb60201b63000007241760201c565b6001604051630000022690630000f264565b90815260200160405180910390209080519060200190630000024b929190630000efc6565b506300000264630000512860201b63000007611760201c565b6002604051630000027690630000f264565b90815260200160405180910390209080519060200190630000029b929190630000f062565b5063000002b4630000535960201b630000093a1760201c565b600860405163000002c690630000f264565b9081526020016040518091039020908051906020019063000002eb929190630000f0b9565b50630000030463000053ee60201b63000009c11760201c565b6001604051630000031690630000f2d1565b90815260200160405180910390209080519060200190630000033b929190630000efc6565b506300000354630000542b60201b63000009fe1760201c565b6002604051630000036690630000f2d1565b90815260200160405180910390209080519060200190630000038b929190630000f062565b5063000003a4630000568d60201b6300000bfe1760201c565b600860405163000003b690630000f2d1565b9081526020016040518091039020908051906020019063000003db929190630000f0b9565b5063000003f4630000572260201b6300000c851760201c565b6001604051630000040690630000f33e565b90815260200160405180910390209080519060200190630000042b929190630000efc6565b506300000444630000575f60201b6300000cc21760201c565b6002604051630000045690630000f33e565b90815260200160405180910390209080519060200190630000047b929190630000f062565b50630000049463000059c060201b6300000ec11760201c565b600860405163000004a690630000f33e565b9081526020016040518091039020908051906020019063000004cb929190630000f0b9565b5063000004e46300005a5560201b6300000f481760201c565b600160405163000004f690630000f3ab565b90815260200160405180910390209080519060200190630000051b929190630000efc6565b5063000005346300005a9260201b6300000f851760201c565b6002604051630000054690630000f3ab565b90815260200160405180910390209080519060200190630000056b929190630000f062565b5063000005846300005cba60201b63000011551760201c565b6008604051630000059690630000f3ab565b9081526020016040518091039020908051906020019063000005bb929190630000f0b9565b5063000005d46300005d4f60201b63000011dc1760201c565b600160405163000005e690630000f418565b90815260200160405180910390209080519060200190630000060b929190630000efc6565b5063000006246300005d8c60201b63000012191760201c565b6002604051630000063690630000f418565b90815260200160405180910390209080519060200190630000065b929190630000f062565b5063000006746300005ff960201b63000014241760201c565b6008604051630000068690630000f418565b9081526020016040518091039020908051906020019063000006ab929190630000f0b9565b5063000006c4630000608e60201b63000014ab1760201c565b600160405163000006d690630000f485565b9081526020016040518091039020908051906020019063000006fb929190630000efc6565b50630000071463000060cb60201b63000014e81760201c565b6002604051630000072690630000f485565b90815260200160405180910390209080519060200190630000074b929190630000f062565b506300000764630000634160201b63000016fc1760201c565b6008604051630000077690630000f485565b90815260200160405180910390209080519060200190630000079b929190630000f0b9565b5063000007b463000063d660201b63000017831760201c565b600160405163000007c690630000f4f2565b9081526020016040518091039020908051906020019063000007eb929190630000efc6565b506300000804630000641360201b63000017c01760201c565b6002604051630000081690630000f4f2565b90815260200160405180910390209080519060200190630000083b929190630000f062565b506300000854630000660760201b63000019661760201c565b6008604051630000086690630000f4f2565b90815260200160405180910390209080519060200190630000088b929190630000f0b9565b5063000008a463000066d260201b6300001a1d1760201c565b600560405163000008b690630000f4f2565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000008f9929190630000efc6565b50630000091263000066f460201b6300001a3d1760201c565b6005604051630000092490630000f4f2565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000967929190630000efc6565b506300000980630000670b60201b6300001a541760201c565b6001604051630000099290630000f55f565b9081526020016040518091039020908051906020019063000009b7929190630000efc6565b5063000009d0630000674860201b6300001a911760201c565b600260405163000009e290630000f55f565b908152602001604051809103902090805190602001906300000a07929190630000f062565b506300000a2063000069e660201b6300001cc31760201c565b60086040516300000a3290630000f55f565b908152602001604051809103902090805190602001906300000a57929190630000f0b9565b506300000a706300006ab160201b6300001d7a1760201c565b60056040516300000a8290630000f55f565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000ac5929190630000efc6565b506300000ade6300006ac860201b6300001d911760201c565b60056040516300000af090630000f55f565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000b33929190630000efc6565b506300000b4c6300006aea60201b6300001db11760201c565b60016040516300000b5e90630000f5cc565b908152602001604051809103902090805190602001906300000b83929190630000efc6565b506300000b9c6300006b2760201b6300001dee1760201c565b60026040516300000bae90630000f5cc565b908152602001604051809103902090805190602001906300000bd3929190630000f062565b506300000bec6300006cdc60201b6300001f5f1760201c565b60086040516300000bfe90630000f5cc565b908152602001604051809103902090805190602001906300000c23929190630000f0b9565b506300000c3c6300006da760201b63000020161760201c565b60056040516300000c4e90630000f5cc565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000c91929190630000efc6565b506300000caa6300006dc960201b63000020361760201c565b60056040516300000cbc90630000f5cc565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000cff929190630000efc6565b506300000d186300006deb60201b63000020561760201c565b60016040516300000d2a90630000f639565b908152602001604051809103902090805190602001906300000d4f929190630000efc6565b506300000d686300006e2860201b63000020931760201c565b60026040516300000d7a90630000f639565b908152602001604051809103902090805190602001906300000d9f929190630000f062565b506300000db86300006f7b60201b63000021ba1760201c565b60086040516300000dca90630000f639565b908152602001604051809103902090805190602001906300000def929190630000f0b9565b506300000e08630000704660201b63000022711760201c565b60056040516300000e1a90630000f639565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000e5d929190630000efc6565b506300000e76630000706860201b63000022911760201c565b60056040516300000e8890630000f639565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300000ecb929190630000efc6565b506300000ee4630000707f60201b63000022a81760201c565b60016040516300000ef690630000f6a6565b908152602001604051809103902090805190602001906300000f1b929190630000efc6565b506300000f3463000070bc60201b63000022e51760201c565b60026040516300000f4690630000f6a6565b908152602001604051809103902090805190602001906300000f6b929190630000f062565b506300000f84630000723c60201b630000242b1760201c565b60086040516300000f9690630000f6a6565b908152602001604051809103902090805190602001906300000fbb929190630000f0b9565b506300000fd4630000730760201b63000024e21760201c565b60056040516300000fe690630000f6a6565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001029929190630000efc6565b506300001042630000732960201b63000025021760201c565b6005604051630000105490630000f6a6565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001097929190630000efc6565b5063000010b0630000734b60201b63000025221760201c565b600160405163000010c290630000f713565b9081526020016040518091039020908051906020019063000010e7929190630000efc6565b506300001100630000738860201b630000255f1760201c565b6002604051630000111290630000f713565b908152602001604051809103902090805190602001906300001137929190630000f062565b506300001150630000762660201b63000027911760201c565b6008604051630000116290630000f713565b908152602001604051809103902090805190602001906300001187929190630000f0b9565b5063000011a063000076f160201b63000028481760201c565b600560405163000011b290630000f713565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000011f5929190630000efc6565b50630000120e630000772e60201b63000028851760201c565b6005604051630000122090630000f713565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001263929190630000efc6565b50630000127c630000775060201b63000028a51760201c565b6001604051630000128e90630000f780565b9081526020016040518091039020908051906020019063000012b3929190630000efc6565b5063000012cc630000778d60201b63000028e21760201c565b600260405163000012de90630000f780565b908152602001604051809103902090805190602001906300001303929190630000f062565b50630000131c6300007a2b60201b6300002b141760201c565b6008604051630000132e90630000f780565b908152602001604051809103902090805190602001906300001353929190630000f0b9565b50630000136c6300007af660201b6300002bcb1760201c565b6005604051630000137e90630000f780565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000013c1929190630000efc6565b5063000013da6300007b0d60201b6300002be21760201c565b600560405163000013ec90630000f780565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000142f929190630000efc6565b5063000014486300007b2f60201b6300002c021760201c565b6001604051630000145a90630000f7ed565b90815260200160405180910390209080519060200190630000147f929190630000efc6565b5063000014986300007b6c60201b6300002c3f1760201c565b600260405163000014aa90630000f7ed565b9081526020016040518091039020908051906020019063000014cf929190630000f062565b5063000014e86300007d6060201b6300002de51760201c565b600860405163000014fa90630000f7ed565b90815260200160405180910390209080519060200190630000151f929190630000f0b9565b5063000015386300007e2b60201b6300002e9c1760201c565b6005604051630000154a90630000f7ed565b90815260200160405180910390206000600863ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000158d929190630000efc6565b5063000015a66300007e4260201b6300002eb31760201c565b600560405163000015b890630000f7ed565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000015fb929190630000efc6565b5063000016146300007e6460201b6300002ed31760201c565b6001604051630000162690630000f85a565b90815260200160405180910390209080519060200190630000164b929190630000efc6565b5063000016646300007ea160201b6300002f101760201c565b6002604051630000167690630000f85a565b90815260200160405180910390209080519060200190630000169b929190630000f062565b5063000016b4630000813f60201b63000031421760201c565b600860405163000016c690630000f85a565b9081526020016040518091039020908051906020019063000016eb929190630000f0b9565b506300001704630000820a60201b63000031f91760201c565b6005604051630000171690630000f85a565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001759929190630000efc6565b506300001772630000822160201b63000032101760201c565b6005604051630000178490630000f85a565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000017c7929190630000efc6565b5063000017e0630000824360201b63000032301760201c565b600160405163000017f290630000f8c7565b908152602001604051809103902090805190602001906300001817929190630000efc6565b506300001830630000828060201b630000326d1760201c565b6002604051630000184290630000f8c7565b908152602001604051809103902090805190602001906300001867929190630000f062565b506300001880630000851e60201b630000349f1760201c565b6008604051630000189290630000f8c7565b9081526020016040518091039020908051906020019063000018b7929190630000f0b9565b5063000018d063000085e960201b63000035561760201c565b600560405163000018e290630000f8c7565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001925929190630000efc6565b50630000193e630000860060201b630000356d1760201c565b6005604051630000195090630000f8c7565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001993929190630000efc6565b5063000019ac630000862260201b630000358d1760201c565b600160405163000019be90630000f934565b9081526020016040518091039020908051906020019063000019e3929190630000efc6565b5063000019fc630000865f60201b63000035ca1760201c565b60026040516300001a0e90630000f934565b908152602001604051809103902090805190602001906300001a33929190630000f062565b506300001a4c63000088c160201b63000037ca1760201c565b60086040516300001a5e90630000f934565b908152602001604051809103902090805190602001906300001a83929190630000f0b9565b506300001a9c630000898c60201b63000038811760201c565b60056040516300001aae90630000f934565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001af1929190630000efc6565b506300001b0a63000089ae60201b63000038a11760201c565b60056040516300001b1c90630000f934565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001b5f929190630000efc6565b506300001b7863000089d060201b63000038c11760201c565b60016040516300001b8a90630000f9a1565b908152602001604051809103902090805190602001906300001baf929190630000efc6565b506300001bc86300008a0d60201b63000038fe1760201c565b60026040516300001bda90630000f9a1565b908152602001604051809103902090805190602001906300001bff929190630000f062565b506300001c186300008c0160201b6300003aa41760201c565b60086040516300001c2a90630000f9a1565b908152602001604051809103902090805190602001906300001c4f929190630000f0b9565b506300001c686300008ccc60201b6300003b5b1760201c565b60056040516300001c7a90630000f9a1565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001cbd929190630000efc6565b506300001cd66300008cee60201b6300003b7b1760201c565b60056040516300001ce890630000f9a1565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001d2b929190630000efc6565b506300001d446300008d0560201b6300003b921760201c565b60016040516300001d5690630000fa0e565b908152602001604051809103902090805190602001906300001d7b929190630000efc6565b506300001d946300008d4260201b6300003bcf1760201c565b60026040516300001da690630000fa0e565b908152602001604051809103902090805190602001906300001dcb929190630000f062565b506300001de46300008fe060201b6300003e011760201c565b60086040516300001df690630000fa0e565b908152602001604051809103902090805190602001906300001e1b929190630000f0b9565b506300001e3463000090ab60201b6300003eb81760201c565b60056040516300001e4690630000fa0e565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001e89929190630000efc6565b506300001ea263000090c260201b6300003ecf1760201c565b60056040516300001eb490630000fa0e565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300001ef7929190630000efc6565b506300001f1063000090e460201b6300003eef1760201c565b60016040516300001f2290630000fa7b565b908152602001604051809103902090805190602001906300001f47929190630000efc6565b506300001f60630000912160201b6300003f2c1760201c565b60026040516300001f7290630000fa7b565b908152602001604051809103902090805190602001906300001f97929190630000f062565b506300001fb063000092d660201b630000409d1760201c565b60086040516300001fc290630000fa7b565b908152602001604051809103902090805190602001906300001fe7929190630000f0b9565b50630000200063000093a160201b63000041541760201c565b6005604051630000201290630000fa7b565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002055929190630000efc6565b50630000206e63000093c360201b63000041741760201c565b6005604051630000208090630000fa7b565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000020c3929190630000efc6565b5063000020dc63000093da60201b630000418b1760201c565b600160405163000020ee90630000fae8565b908152602001604051809103902090805190602001906300002113929190630000efc6565b50630000212c630000941760201b63000041c81760201c565b6002604051630000213e90630000fae8565b908152602001604051809103902090805190602001906300002163929190630000f062565b50630000217c630000960c60201b63000043791760201c565b6008604051630000218e90630000fae8565b9081526020016040518091039020908051906020019063000021b3929190630000f0b9565b5063000021cc63000096d760201b63000044301760201c565b600560405163000021de90630000fae8565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002221929190630000efc6565b50630000223a63000096f960201b63000044501760201c565b6005604051630000224c90630000fae8565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000228f929190630000efc6565b5063000022a8630000973660201b630000448d1760201c565b600160405163000022ba90630000fb55565b9081526020016040518091039020908051906020019063000022df929190630000efc6565b5063000022f8630000977360201b63000044ca1760201c565b6002604051630000230a90630000fb55565b90815260200160405180910390209080519060200190630000232f929190630000f062565b506300002348630000992960201b630000463c1760201c565b6008604051630000235a90630000fb55565b90815260200160405180910390209080519060200190630000237f929190630000f0b9565b50630000239863000099f460201b63000046f31760201c565b600560405163000023aa90630000fb55565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000023ed929190630000efc6565b5063000024066300009a1660201b63000047131760201c565b6005604051630000241890630000fb55565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000245b929190630000efc6565b5063000024746300009a2d60201b630000472a1760201c565b6001604051630000248690630000fbc2565b9081526020016040518091039020908051906020019063000024ab929190630000efc6565b5063000024c46300009a6a60201b63000047671760201c565b600260405163000024d690630000fbc2565b9081526020016040518091039020908051906020019063000024fb929190630000f062565b5063000025146300009d0860201b63000049991760201c565b6008604051630000252690630000fbc2565b90815260200160405180910390209080519060200190630000254b929190630000f0b9565b5063000025646300009dd360201b6300004a501760201c565b6005604051630000257690630000fbc2565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000025b9929190630000efc6565b5063000025d26300009df560201b6300004a701760201c565b600560405163000025e490630000fbc2565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002627929190630000efc6565b5063000026406300009e1760201b6300004a901760201c565b6001604051630000265290630000fc2f565b908152602001604051809103902090805190602001906300002677929190630000efc6565b5063000026906300009e5460201b6300004acd1760201c565b600260405163000026a290630000fc2f565b9081526020016040518091039020908051906020019063000026c7929190630000f062565b5063000026e0630000a0f260201b6300004cff1760201c565b600860405163000026f290630000fc2f565b908152602001604051809103902090805190602001906300002717929190630000f0b9565b506300002730630000a1bd60201b6300004db61760201c565b6005604051630000274290630000fc2f565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002785929190630000efc6565b50630000279e630000a1d460201b6300004dcd1760201c565b600560405163000027b090630000fc2f565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000027f3929190630000efc6565b50630000280c630000a1f660201b6300004ded1760201c565b6001604051630000281e90630000fc9c565b908152602001604051809103902090805190602001906300002843929190630000efc6565b50630000285c630000a23360201b6300004e2a1760201c565b6002604051630000286e90630000fc9c565b908152602001604051809103902090805190602001906300002893929190630000f062565b5063000028ac630000a4d160201b630000505c1760201c565b600860405163000028be90630000fc9c565b9081526020016040518091039020908051906020019063000028e3929190630000f0b9565b5063000028fc630000a59c60201b63000051131760201c565b6005604051630000290e90630000fc9c565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002951929190630000efc6565b50630000296a630000a5b360201b630000512a1760201c565b6005604051630000297c90630000fc9c565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000029bf929190630000efc6565b5063000029d8630000a5d560201b630000514a1760201c565b600160405163000029ea90630000fd09565b908152602001604051809103902090805190602001906300002a0f929190630000efc6565b506300002a28630000a61260201b63000051871760201c565b60026040516300002a3a90630000fd09565b908152602001604051809103902090805190602001906300002a5f929190630000f062565b506300002a78630000a83a60201b63000053571760201c565b60086040516300002a8a90630000fd09565b908152602001604051809103902090805190602001906300002aaf929190630000f0b9565b506300002ac8630000a90560201b630000540e1760201c565b60056040516300002ada90630000fd09565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002b1d929190630000efc6565b506300002b36630000a91c60201b63000054251760201c565b60056040516300002b4890630000fd09565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002b8b929190630000efc6565b506300002ba4630000a93e60201b63000054451760201c565b60016040516300002bb690630000fd76565b908152602001604051809103902090805190602001906300002bdb929190630000efc6565b506300002bf4630000a97b60201b63000054821760201c565b60026040516300002c0690630000fd76565b908152602001604051809103902090805190602001906300002c2b929190630000f062565b506300002c44630000ab3060201b63000055f31760201c565b60086040516300002c5690630000fd76565b908152602001604051809103902090805190602001906300002c7b929190630000f0b9565b506300002c94630000abfb60201b63000056aa1760201c565b60056040516300002ca690630000fd76565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002ce9929190630000efc6565b506300002d02630000ac1260201b63000056c11760201c565b60056040516300002d1490630000fd76565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002d57929190630000efc6565b506300002d70630000ac3460201b63000056e11760201c565b60016040516300002d8290630000fde3565b908152602001604051809103902090805190602001906300002da7929190630000efc6565b506300002dc0630000ac7160201b630000571e1760201c565b60026040516300002dd290630000fde3565b908152602001604051809103902090805190602001906300002df7929190630000f062565b506300002e10630000ae2760201b63000058901760201c565b60086040516300002e2290630000fde3565b908152602001604051809103902090805190602001906300002e47929190630000f0b9565b506300002e60630000aef260201b63000059471760201c565b60056040516300002e7290630000fde3565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002eb5929190630000efc6565b506300002ece630000af0960201b630000595e1760201c565b60056040516300002ee090630000fde3565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300002f23929190630000efc6565b506300002f3c630000af2b60201b630000597e1760201c565b60016040516300002f4e90630000fe50565b908152602001604051809103902090805190602001906300002f73929190630000efc6565b506300002f8c630000af6860201b63000059bb1760201c565b60026040516300002f9e90630000fe50565b908152602001604051809103902090805190602001906300002fc3929190630000f062565b506300002fdc630000b20660201b6300005bed1760201c565b60086040516300002fee90630000fe50565b908152602001604051809103902090805190602001906300003013929190630000f0b9565b50630000302c630000b2d160201b6300005ca41760201c565b6005604051630000303e90630000fe50565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003081929190630000efc6565b50630000309a630000b2f360201b6300005cc41760201c565b600560405163000030ac90630000fe50565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000030ef929190630000efc6565b506300003108630000b31560201b6300005ce41760201c565b6001604051630000311a90630000febd565b90815260200160405180910390209080519060200190630000313f929190630000efc6565b506300003158630000b35260201b6300005d211760201c565b6002604051630000316a90630000febd565b90815260200160405180910390209080519060200190630000318f929190630000f062565b5063000031a8630000b5f060201b6300005f531760201c565b600860405163000031ba90630000febd565b9081526020016040518091039020908051906020019063000031df929190630000f0b9565b5063000031f8630000b6bb60201b630000600a1760201c565b6005604051630000320a90630000febd565b90815260200160405180910390206000600863ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000324d929190630000efc6565b506300003266630000b6dd60201b630000602a1760201c565b6005604051630000327890630000febd565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000032bb929190630000efc6565b5063000032d4630000b6ff60201b630000604a1760201c565b600160405163000032e690630000ff2a565b90815260200160405180910390209080519060200190630000330b929190630000efc6565b506300003324630000b73c60201b63000060871760201c565b6002604051630000333690630000ff2a565b90815260200160405180910390209080519060200190630000335b929190630000f062565b506300003374630000b9da60201b63000062b91760201c565b6008604051630000338690630000ff2a565b9081526020016040518091039020908051906020019063000033ab929190630000f0b9565b5063000033c4630000baa560201b63000063701760201c565b600560405163000033d690630000ff2a565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003419929190630000efc6565b506300003432630000bac760201b63000063901760201c565b6005604051630000344490630000ff2a565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003487929190630000efc6565b5063000034a0630000bae960201b63000063b01760201c565b600160405163000034b290630000ff97565b9081526020016040518091039020908051906020019063000034d7929190630000efc6565b5063000034f0630000bb2660201b63000063ed1760201c565b6002604051630000350290630000ff97565b908152602001604051809103902090805190602001906300003527929190630000f062565b506300003540630000bce260201b63000065651760201c565b6008604051630000355290630000ff97565b908152602001604051809103902090805190602001906300003577929190630000f0b9565b506300003590630000bdad60201b630000661c1760201c565b600560405163000035a290630000ff97565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000035e5929190630000efc6565b5063000035fe630000bdcf60201b630000663c1760201c565b6005604051630000361090630000ff97565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003653929190630000efc6565b50630000366c630000bdf160201b630000665c1760201c565b6001604051630000367e906300010004565b9081526020016040518091039020908051906020019063000036a3929190630000efc6565b5063000036bc630000be2e60201b63000066991760201c565b600260405163000036ce906300010004565b9081526020016040518091039020908051906020019063000036f3929190630000f062565b50630000370c630000c0cc60201b63000068cb1760201c565b6008604051630000371e906300010004565b908152602001604051809103902090805190602001906300003743929190630000f0b9565b50630000375c630000c19760201b63000069821760201c565b6005604051630000376e906300010004565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000037b1929190630000efc6565b5063000037ca630000c1b960201b63000069a21760201c565b600560405163000037dc906300010004565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000381f929190630000efc6565b506300003838630000c1d060201b63000069b91760201c565b6001604051630000384a906300010071565b90815260200160405180910390209080519060200190630000386f929190630000efc6565b506300003888630000c20d60201b63000069f61760201c565b6002604051630000389a906300010071565b9081526020016040518091039020908051906020019063000038bf929190630000f062565b5063000038d8630000c4ab60201b6300006c281760201c565b600860405163000038ea906300010071565b90815260200160405180910390209080519060200190630000390f929190630000f0b9565b506300003928630000c57660201b6300006cdf1760201c565b6005604051630000393a906300010071565b90815260200160405180910390206000600863ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000397d929190630000efc6565b506300003996630000c58d60201b6300006cf61760201c565b600560405163000039a8906300010071565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000039eb929190630000efc6565b506300003a04630000c5af60201b6300006d161760201c565b60016040516300003a169063000100de565b908152602001604051809103902090805190602001906300003a3b929190630000efc6565b506300003a54630000c5ec60201b6300006d531760201c565b60026040516300003a669063000100de565b908152602001604051809103902090805190602001906300003a8b929190630000f062565b506300003aa4630000c82560201b6300006f341760201c565b60086040516300003ab69063000100de565b908152602001604051809103902090805190602001906300003adb929190630000f0b9565b506300003af4630000c8f060201b6300006feb1760201c565b60056040516300003b069063000100de565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003b49929190630000efc6565b506300003b62630000c90760201b63000070021760201c565b60056040516300003b749063000100de565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003bb7929190630000efc6565b506300003bd0630000c92960201b63000070221760201c565b60016040516300003be290630001014b565b908152602001604051809103902090805190602001906300003c07929190630000efc6565b506300003c20630000c96660201b630000705f1760201c565b60026040516300003c3290630001014b565b908152602001604051809103902090805190602001906300003c57929190630000f062565b506300003c70630000cc0460201b63000072911760201c565b60086040516300003c8290630001014b565b908152602001604051809103902090805190602001906300003ca7929190630000f0b9565b506300003cc0630000cccf60201b63000073481760201c565b60056040516300003cd290630001014b565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003d15929190630000efc6565b506300003d2e630000ccf160201b63000073681760201c565b60056040516300003d4090630001014b565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003d83929190630000efc6565b506300003d9c630000cd1360201b63000073881760201c565b60016040516300003dae9063000101b8565b908152602001604051809103902090805190602001906300003dd3929190630000efc6565b506300003dec630000cd5060201b63000073c51760201c565b60026040516300003dfe9063000101b8565b908152602001604051809103902090805190602001906300003e23929190630000f062565b506300003e3c630000cfee60201b63000075f71760201c565b60086040516300003e4e9063000101b8565b908152602001604051809103902090805190602001906300003e73929190630000f0b9565b506300003e8c630000d0b960201b63000076ae1760201c565b60056040516300003e9e9063000101b8565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003ee1929190630000efc6565b506300003efa630000d0db60201b63000076ce1760201c565b60056040516300003f0c9063000101b8565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300003f4f929190630000efc6565b506300003f68630000d0fd60201b63000076ee1760201c565b60016040516300003f7a906300010225565b908152602001604051809103902090805190602001906300003f9f929190630000efc6565b506300003fb8630000d13a60201b630000772b1760201c565b60026040516300003fca906300010225565b908152602001604051809103902090805190602001906300003fef929190630000f062565b506300004008630000d3d860201b630000795d1760201c565b6008604051630000401a906300010225565b90815260200160405180910390209080519060200190630000403f929190630000f0b9565b506300004058630000d4a360201b6300007a141760201c565b6005604051630000406a906300010225565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000040ad929190630000efc6565b5063000040c6630000d4c560201b6300007a341760201c565b600560405163000040d8906300010225565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000411b929190630000efc6565b506300004134630000d4e760201b6300007a541760201c565b60016040516300004146906300010292565b90815260200160405180910390209080519060200190630000416b929190630000efc6565b506300004184630000d52460201b6300007a911760201c565b60026040516300004196906300010292565b9081526020016040518091039020908051906020019063000041bb929190630000f062565b5063000041d4630000d7c260201b6300007cc31760201c565b600860405163000041e6906300010292565b90815260200160405180910390209080519060200190630000420b929190630000f0b9565b506300004224630000d88d60201b6300007d7a1760201c565b60056040516300004236906300010292565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004279929190630000efc6565b506300004292630000d8af60201b6300007d9a1760201c565b600560405163000042a4906300010292565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000042e7929190630000efc6565b506300004300630000d8d160201b6300007dba1760201c565b600160405163000043129063000102ff565b908152602001604051809103902090805190602001906300004337929190630000efc6565b506300004350630000d90e60201b6300007df71760201c565b600260405163000043629063000102ff565b908152602001604051809103902090805190602001906300004387929190630000f062565b5063000043a0630000dbac60201b63000080291760201c565b600860405163000043b29063000102ff565b9081526020016040518091039020908051906020019063000043d7929190630000f0b9565b5063000043f0630000dc7760201b63000080e01760201c565b600560405163000044029063000102ff565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004445929190630000efc6565b50630000445e630000dc9960201b63000081001760201c565b600560405163000044709063000102ff565b90815260200160405180910390206000600763ffffffff1663ffffffff168152602001908152602001600020908051906020019063000044b3929190630000efc6565b5063000044cc630000dcbb60201b63000081201760201c565b600160405163000044de90630001036c565b908152602001604051809103902090805190602001906300004503929190630000efc6565b50630000451c630000dcf860201b630000815d1760201c565b6002604051630000452e90630001036c565b908152602001604051809103902090805190602001906300004553929190630000f062565b50630000456c630000df5a60201b630000835d1760201c565b6008604051630000457e90630001036c565b9081526020016040518091039020908051906020019063000045a3929190630000f0b9565b5063000045bc630000e02560201b63000084141760201c565b600560405163000045ce90630001036c565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004611929190630000efc6565b50630000462a630000e04760201b63000084341760201c565b6005604051630000463c90630001036c565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000467f929190630000efc6565b506300004698630000e06960201b63000084541760201c565b600160405163000046aa9063000103d9565b9081526020016040518091039020908051906020019063000046cf929190630000efc6565b5063000046e8630000e0a660201b63000084911760201c565b600260405163000046fa9063000103d9565b90815260200160405180910390209080519060200190630000471f929190630000f062565b506300004738630000e30860201b63000086911760201c565b6008604051630000474a9063000103d9565b90815260200160405180910390209080519060200190630000476f929190630000f0b9565b506300004788630000e3d360201b63000087481760201c565b6005604051630000479a9063000103d9565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000047dd929190630000efc6565b5063000047f6630000e3f560201b63000087681760201c565b600560405163000048089063000103d9565b90815260200160405180910390206000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190630000484b929190630000efc6565b506300004864630000e41760201b63000087881760201c565b60016040516300004876906300010446565b90815260200160405180910390209080519060200190630000489b929190630000efc6565b5063000048b4630000e45460201b63000087c51760201c565b600260405163000048c6906300010446565b9081526020016040518091039020908051906020019063000048eb929190630000f062565b506300004904630000e6f260201b63000089f71760201c565b60086040516300004916906300010446565b90815260200160405180910390209080519060200190630000493b929190630000f0b9565b506300004954630000e7bd60201b6300008aae1760201c565b60056040516300004966906300010446565b90815260200160405180910390206000600863ffffffff1663ffffffff168152602001908152602001600020908051906020019063000049a9929190630000efc6565b5063000049c2630000e7df60201b6300008ace1760201c565b600560405163000049d4906300010446565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004a17929190630000efc6565b506300004a30630000e80160201b6300008aee1760201c565b60016040516300004a429063000104b3565b908152602001604051809103902090805190602001906300004a67929190630000efc6565b506300004a80630000e83e60201b6300008b2b1760201c565b60026040516300004a929063000104b3565b908152602001604051809103902090805190602001906300004ab7929190630000f062565b506300004ad0630000eadc60201b6300008d5d1760201c565b60086040516300004ae29063000104b3565b908152602001604051809103902090805190602001906300004b07929190630000f0b9565b506300004b20630000eba760201b6300008e141760201c565b60056040516300004b329063000104b3565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004b75929190630000efc6565b506300004b8e630000ebc960201b6300008e341760201c565b60056040516300004ba09063000104b3565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004be3929190630000efc6565b506300004bfc630000ebeb60201b6300008e541760201c565b60016040516300004c0e906300010520565b908152602001604051809103902090805190602001906300004c33929190630000efc6565b506300004c4c630000ec2860201b6300008e911760201c565b60026040516300004c5e906300010520565b908152602001604051809103902090805190602001906300004c83929190630000f062565b506300004c9c630000eec260201b63000090cf1760201c565b60086040516300004cae906300010520565b908152602001604051809103902090805190602001906300004cd3929190630000f0b9565b506300004cec630000ef8d60201b63000091861760201c565b60056040516300004cfe906300010520565b90815260200160405180910390206000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004d41929190630000efc6565b506300004d5a630000efa460201b630000919d1760201c565b60056040516300004d6c906300010520565b90815260200160405180910390206000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906300004daf929190630000efc6565b5063000106a1565b60606040518060400160405280600481526020017f6274637300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156300004e19576300004e186300010539565b5b6040519080825280602002602001820160405280156300004e495781602001602082028036833780820191505090505b5090506103e860006300004e5f919063000105a1565b816000815181106300004e79576300004e786300010609565b5b6020026020010181815250506103e860016300004e98919063000105a1565b816001815181106300004eb2576300004eb16300010609565b5b6020026020010181815250506103e860056300004ed1919063000105a1565b816002815181106300004eeb576300004eea6300010609565b5b6020026020010181815250506103e860146300004f0a919063000105a1565b816003815181106300004f24576300004f236300010609565b5b6020026020010181815250506103e860326300004f43919063000105a1565b816004815181106300004f5d576300004f5c6300010609565b5b6020026020010181815250506103e860646300004f7c919063000105a1565b816005815181106300004f96576300004f956300010609565b5b6020026020010181815250506103e860c86300004fb5919063000105a1565b816006815181106300004fcf576300004fce6300010609565b5b6020026020010181815250506103e86101f46300004fef919063000105a1565b8160078151811063000050095763000050086300010609565b5b6020026020010181815250506103e86103206300005029919063000105a1565b8160088151811063000050435763000050426300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff811115630000507b57630000507a6300010539565b5b60405190808252806020026020018201604052801563000050ab5781602001602082028036833780820191505090505b50905060098160008151811063000050ca5763000050c96300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6361747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff811115630000514d57630000514c6300010539565b5b604051908082528060200260200182016040528015630000517d5781602001602082028036833780820191505090505b5090506103e860006300005193919063000105a1565b8160008151811063000051ad5763000051ac6300010609565b5b6020026020010181815250506103e8600163000051cc919063000105a1565b8160018151811063000051e65763000051e56300010609565b5b6020026020010181815250506103e86127106300005206919063000105a1565b81600281518110630000522057630000521f6300010609565b5b6020026020010181815250506103e861c3506300005240919063000105a1565b81600381518110630000525a5763000052596300010609565b5b6020026020010181815250506103e8620186a0630000527b919063000105a1565b8160048151811063000052955763000052946300010609565b5b6020026020010181815250506103e862030d4063000052b6919063000105a1565b8160058151811063000052d05763000052cf6300010609565b5b6020026020010181815250506103e86207a12063000052f1919063000105a1565b81600681518110630000530b57630000530a6300010609565b5b6020026020010181815250506103e8620c3500630000532c919063000105a1565b8160078151811063000053465763000053456300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff811115630000537e57630000537d6300010539565b5b60405190808252806020026020018201604052801563000053ae5781602001602082028036833780820191505090505b50905060098160008151811063000053cd5763000053cc6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6c6f6e6700000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff811115630000545057630000544f6300010539565b5b60405190808252806020026020018201604052801563000054805781602001602082028036833780820191505090505b5090506103e860006300005496919063000105a1565b8160008151811063000054b05763000054af6300010609565b5b6020026020010181815250506103e8600163000054cf919063000105a1565b8160018151811063000054e95763000054e86300010609565b5b6020026020010181815250506103e860146300005508919063000105a1565b8160028151811063000055225763000055216300010609565b5b6020026020010181815250506103e860326300005541919063000105a1565b81600381518110630000555b57630000555a6300010609565b5b6020026020010181815250506103e860c8630000557a919063000105a1565b8160048151811063000055945763000055936300010609565b5b6020026020010181815250506103e86101f463000055b4919063000105a1565b8160058151811063000055ce5763000055cd6300010609565b5b6020026020010181815250506103e88063000055ec919063000105a1565b8160068151811063000056065763000056056300010609565b5b6020026020010181815250506103e86107d06300005626919063000105a1565b81600781518110630000564057630000563f6300010609565b5b6020026020010181815250506103e8610bb86300005660919063000105a1565b81600881518110630000567a5763000056796300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff81111563000056b25763000056b16300010539565b5b60405190808252806020026020018201604052801563000056e25781602001602082028036833780820191505090505b50905060098160008151811063000057015763000057006300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6d6d737300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff81111563000057845763000057836300010539565b5b60405190808252806020026020018201604052801563000057b45781602001602082028036833780820191505090505b5090506103e8600063000057ca919063000105a1565b8160008151811063000057e45763000057e36300010609565b5b6020026020010181815250506103e860016300005803919063000105a1565b81600181518110630000581d57630000581c6300010609565b5b6020026020010181815250506103e86014630000583c919063000105a1565b8160028151811063000058565763000058556300010609565b5b6020026020010181815250506103e860326300005875919063000105a1565b81600381518110630000588f57630000588e6300010609565b5b6020026020010181815250506103e8606463000058ae919063000105a1565b8160048151811063000058c85763000058c76300010609565b5b6020026020010181815250506103e860c863000058e7919063000105a1565b8160058151811063000059015763000059006300010609565b5b6020026020010181815250506103e86101f46300005921919063000105a1565b81600681518110630000593b57630000593a6300010609565b5b6020026020010181815250506103e8806300005959919063000105a1565b8160078151811063000059735763000059726300010609565b5b6020026020010181815250506103e86107d06300005993919063000105a1565b8160088151811063000059ad5763000059ac6300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff81111563000059e55763000059e46300010539565b5b6040519080825280602002602001820160405280156300005a155781602001602082028036833780820191505090505b5090506009816000815181106300005a34576300005a336300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6f72646900000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff8111156300005ab7576300005ab66300010539565b5b6040519080825280602002602001820160405280156300005ae75781602001602082028036833780820191505090505b5090506103e860006300005afd919063000105a1565b816000815181106300005b17576300005b166300010609565b5b6020026020010181815250506103e860016300005b36919063000105a1565b816001815181106300005b50576300005b4f6300010609565b5b6020026020010181815250506103e860056300005b6f919063000105a1565b816002815181106300005b89576300005b886300010609565b5b6020026020010181815250506103e860146300005ba8919063000105a1565b816003815181106300005bc2576300005bc16300010609565b5b6020026020010181815250506103e860326300005be1919063000105a1565b816004815181106300005bfb576300005bfa6300010609565b5b6020026020010181815250506103e860646300005c1a919063000105a1565b816005815181106300005c34576300005c336300010609565b5b6020026020010181815250506103e860c86300005c53919063000105a1565b816006815181106300005c6d576300005c6c6300010609565b5b6020026020010181815250506103e86101f46300005c8d919063000105a1565b816007815181106300005ca7576300005ca66300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff8111156300005cdf576300005cde6300010539565b5b6040519080825280602002602001820160405280156300005d0f5781602001602082028036833780820191505090505b5090506009816000815181106300005d2e576300005d2d6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f7261747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156300005db1576300005db06300010539565b5b6040519080825280602002602001820160405280156300005de15781602001602082028036833780820191505090505b5090506103e860006300005df7919063000105a1565b816000815181106300005e11576300005e106300010609565b5b6020026020010181815250506103e860016300005e30919063000105a1565b816001815181106300005e4a576300005e496300010609565b5b6020026020010181815250506103e8619c406300005e6a919063000105a1565b816002815181106300005e84576300005e836300010609565b5b6020026020010181815250506103e862030d406300005ea5919063000105a1565b816003815181106300005ebf576300005ebe6300010609565b5b6020026020010181815250506103e8620f42406300005ee0919063000105a1565b816004815181106300005efa576300005ef96300010609565b5b6020026020010181815250506103e8621e84806300005f1b919063000105a1565b816005815181106300005f35576300005f346300010609565b5b6020026020010181815250506103e8623d09006300005f56919063000105a1565b816006815181106300005f70576300005f6f6300010609565b5b6020026020010181815250506103e8629896806300005f91919063000105a1565b816007815181106300005fab576300005faa6300010609565b5b6020026020010181815250506103e8621e84806300005fcc919063000105a1565b816008815181106300005fe6576300005fe56300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff811115630000601e57630000601d6300010539565b5b604051908082528060200260200182016040528015630000604e5781602001602082028036833780820191505090505b509050600981600081518110630000606d57630000606c6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f7361747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff81111563000060f05763000060ef6300010539565b5b60405190808252806020026020018201604052801563000061205781602001602082028036833780820191505090505b5090506103e860006300006136919063000105a1565b81600081518110630000615057630000614f6300010609565b5b6020026020010181815250506103e86001630000616f919063000105a1565b8160018151811063000061895763000061886300010609565b5b6020026020010181815250506103e86302625a0063000061ab919063000105a1565b8160028151811063000061c55763000061c46300010609565b5b6020026020010181815250506103e8630bebc20063000061e7919063000105a1565b8160038151811063000062015763000062006300010609565b5b6020026020010181815250506103e8631dcd65006300006223919063000105a1565b81600481518110630000623d57630000623c6300010609565b5b6020026020010181815250506103e8633b9aca00630000625f919063000105a1565b8160058151811063000062795763000062786300010609565b5b6020026020010181815250506103e86377359400630000629b919063000105a1565b8160068151811063000062b55763000062b46300010609565b5b6020026020010181815250506103e863ee6b280063000062d7919063000105a1565b8160078151811063000062f15763000062f06300010609565b5b6020026020010181815250506103e8640165a0bc006300006314919063000105a1565b81600881518110630000632e57630000632d6300010609565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff81111563000063665763000063656300010539565b5b60405190808252806020026020018201604052801563000063965781602001602082028036833780820191505090505b50905060098160008151811063000063b55763000063b46300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600381526020017f6164610000000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff81111563000064385763000064376300010539565b5b60405190808252806020026020018201604052801563000064685781602001602082028036833780820191505090505b5090506103e86000630000647e919063000105a1565b8160008151811063000064985763000064976300010609565b5b6020026020010181815250506103e88063000064b6919063000105a1565b8160018151811063000064d05763000064cf6300010609565b5b6020026020010181815250506103e861138863000064f0919063000105a1565b81600281518110630000650a5763000065096300010609565b5b6020026020010181815250506103e8614e20630000652a919063000105a1565b8160038151811063000065445763000065436300010609565b5b6020026020010181815250506103e861c3506300006564919063000105a1565b81600481518110630000657e57630000657d6300010609565b5b6020026020010181815250506103e8620186a0630000659f919063000105a1565b8160058151811063000065b95763000065b86300010609565b5b6020026020010181815250506103e8620493e063000065da919063000105a1565b8160068151811063000065f45763000065f36300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000662c57630000662b6300010539565b5b604051908082528060200260200182016040528015630000665c5781602001602082028036833780820191505090505b509050600781600081518110630000667b57630000667a6300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000066b15763000066b06300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d24a602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f616d700000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000676d57630000676c6300010539565b5b604051908082528060200260200182016040528015630000679d5781602001602082028036833780820191505090505b5090506103e8600063000067b3919063000105a1565b8160008151811063000067cd5763000067cc6300010609565b5b6020026020010181815250506103e8600163000067ec919063000105a1565b8160018151811063000068065763000068056300010609565b5b6020026020010181815250506103e860326300006825919063000105a1565b81600281518110630000683f57630000683e6300010609565b5b6020026020010181815250506103e86064630000685e919063000105a1565b8160038151811063000068785763000068776300010609565b5b6020026020010181815250506103e860c86300006897919063000105a1565b8160048151811063000068b15763000068b06300010609565b5b6020026020010181815250506103e86101f463000068d1919063000105a1565b8160058151811063000068eb5763000068ea6300010609565b5b6020026020010181815250506103e8610320630000690b919063000105a1565b8160068151811063000069255763000069246300010609565b5b6020026020010181815250506103e86104b06300006945919063000105a1565b81600781518110630000695f57630000695e6300010609565b5b6020026020010181815250506103e8610640630000697f919063000105a1565b8160088151811063000069995763000069986300010609565b5b6020026020010181815250506103e8610bb863000069b9919063000105a1565b8160098151811063000069d35763000069d26300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300006a0b576300006a0a6300010539565b5b6040519080825280602002602001820160405280156300006a3b5781602001602082028036833780820191505090505b5090506007816000815181106300006a5a576300006a596300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300006a90576300006a8f6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d7dc602a9139905090565b60606040518060400160405280600481526020017f61746f6d00000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff8111156300006b4c576300006b4b6300010539565b5b6040519080825280602002602001820160405280156300006b7c5781602001602082028036833780820191505090505b5090506103e860006300006b92919063000105a1565b816000815181106300006bac576300006bab6300010609565b5b6020026020010181815250506103e860016300006bcb919063000105a1565b816001815181106300006be5576300006be46300010609565b5b6020026020010181815250506103e860056300006c04919063000105a1565b816002815181106300006c1e576300006c1d6300010609565b5b6020026020010181815250506103e860146300006c3d919063000105a1565b816003815181106300006c57576300006c566300010609565b5b6020026020010181815250506103e860326300006c76919063000105a1565b816004815181106300006c90576300006c8f6300010609565b5b6020026020010181815250506103e860506300006caf919063000105a1565b816005815181106300006cc9576300006cc86300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300006d01576300006d006300010539565b5b6040519080825280602002602001820160405280156300006d315781602001602082028036833780820191505090505b5090506007816000815181106300006d50576300006d4f6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300006d86576300006d856300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d2f2602a9139905090565b60606040518060600160405280602a8152602001630001d566602a9139905090565b60606040518060400160405280600381526020017f6263680000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff8111156300006e4d576300006e4c6300010539565b5b6040519080825280602002602001820160405280156300006e7d5781602001602082028036833780820191505090505b5090506000816000815181106300006e9c576300006e9b6300010609565b5b6020026020010181815250506064816001815181106300006ec4576300006ec36300010609565b5b6020026020010181815250506101f4816002815181106300006eed576300006eec6300010609565b5b6020026020010181815250506107d0816003815181106300006f16576300006f156300010609565b5b602002602001018181525050611770816004815181106300006f3f576300006f3e6300010609565b5b602002602001018181525050612ee0816005815181106300006f68576300006f676300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300006fa0576300006f9f6300010539565b5b6040519080825280602002602001820160405280156300006fd05781602001602082028036833780820191505090505b5090506007816000815181106300006fef576300006fee6300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000070255763000070246300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d53c602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600481526020017f6265616e00000000000000000000000000000000000000000000000000000000815250905090565b60606000600567ffffffffffffffff81111563000070e15763000070e06300010539565b5b60405190808252806020026020018201604052801563000071115781602001602082028036833780820191505090505b5090506103e860006300007127919063000105a1565b8160008151811063000071415763000071406300010609565b5b6020026020010181815250506103e86105dc6300007161919063000105a1565b81600181518110630000717b57630000717a6300010609565b5b6020026020010181815250506103e8611388630000719b919063000105a1565b8160028151811063000071b55763000071b46300010609565b5b6020026020010181815250506103e861271063000071d5919063000105a1565b8160038151811063000071ef5763000071ee6300010609565b5b6020026020010181815250506103e861c350630000720f919063000105a1565b8160048151811063000072295763000072286300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000072615763000072606300010539565b5b60405190808252806020026020018201604052801563000072915781602001602082028036833780820191505090505b50905060078160008151811063000072b05763000072af6300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000072e65763000072e56300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d75e602a9139905090565b60606040518060600160405280602a8152602001630001d902602a9139905090565b60606040518060400160405280600381526020017f626e620000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111563000073ad5763000073ac6300010539565b5b60405190808252806020026020018201604052801563000073dd5781602001602082028036833780820191505090505b5090506103e8600063000073f3919063000105a1565b81600081518110630000740d57630000740c6300010609565b5b6020026020010181815250506103e86001630000742c919063000105a1565b8160018151811063000074465763000074456300010609565b5b6020026020010181815250506103e860326300007465919063000105a1565b81600281518110630000747f57630000747e6300010609565b5b6020026020010181815250506103e86064630000749e919063000105a1565b8160038151811063000074b85763000074b76300010609565b5b6020026020010181815250506103e860c863000074d7919063000105a1565b8160048151811063000074f15763000074f06300010609565b5b6020026020010181815250506103e86101f46300007511919063000105a1565b81600581518110630000752b57630000752a6300010609565b5b6020026020010181815250506103e8610320630000754b919063000105a1565b8160068151811063000075655763000075646300010609565b5b6020026020010181815250506103e86104b06300007585919063000105a1565b81600781518110630000759f57630000759e6300010609565b5b6020026020010181815250506103e861064063000075bf919063000105a1565b8160088151811063000075d95763000075d86300010609565b5b6020026020010181815250506103e8610bb863000075f9919063000105a1565b8160098151811063000076135763000076126300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000764b57630000764a6300010539565b5b604051908082528060200260200182016040528015630000767b5781602001602082028036833780820191505090505b509050600781600081518110630000769a5763000076996300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000076d05763000076cf6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600c81526020017f4e617469766520546f6b656e0000000000000000000000000000000000000000815250905090565b60606040518060600160405280602a8152602001630001d662602a9139905090565b60606040518060400160405280600481526020017f636f6d7000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111563000077b25763000077b16300010539565b5b60405190808252806020026020018201604052801563000077e25781602001602082028036833780820191505090505b5090506103e8600063000077f8919063000105a1565b8160008151811063000078125763000078116300010609565b5b6020026020010181815250506103e860016300007831919063000105a1565b81600181518110630000784b57630000784a6300010609565b5b6020026020010181815250506103e86032630000786a919063000105a1565b8160028151811063000078845763000078836300010609565b5b6020026020010181815250506103e8606463000078a3919063000105a1565b8160038151811063000078bd5763000078bc6300010609565b5b6020026020010181815250506103e860c863000078dc919063000105a1565b8160048151811063000078f65763000078f56300010609565b5b6020026020010181815250506103e86101f46300007916919063000105a1565b81600581518110630000793057630000792f6300010609565b5b6020026020010181815250506103e86103206300007950919063000105a1565b81600681518110630000796a5763000079696300010609565b5b6020026020010181815250506103e86104b0630000798a919063000105a1565b8160078151811063000079a45763000079a36300010609565b5b6020026020010181815250506103e861064063000079c4919063000105a1565b8160088151811063000079de5763000079dd6300010609565b5b6020026020010181815250506103e8610bb863000079fe919063000105a1565b816009815181106300007a18576300007a176300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300007a50576300007a4f6300010539565b5b6040519080825280602002602001820160405280156300007a805781602001602082028036833780820191505090505b5090506007816000815181106300007a9f576300007a9e6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300007ad5576300007ad46300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d6e0602a9139905090565b60606040518060400160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff8111156300007b91576300007b906300010539565b5b6040519080825280602002602001820160405280156300007bc15781602001602082028036833780820191505090505b5090506103e860006300007bd7919063000105a1565b816000815181106300007bf1576300007bf06300010609565b5b6020026020010181815250506103e8806300007c0f919063000105a1565b816001815181106300007c29576300007c286300010609565b5b6020026020010181815250506103e86113886300007c49919063000105a1565b816002815181106300007c63576300007c626300010609565b5b6020026020010181815250506103e8614e206300007c83919063000105a1565b816003815181106300007c9d576300007c9c6300010609565b5b6020026020010181815250506103e861c3506300007cbd919063000105a1565b816004815181106300007cd7576300007cd66300010609565b5b6020026020010181815250506103e8620186a06300007cf8919063000105a1565b816005815181106300007d12576300007d116300010609565b5b6020026020010181815250506103e8620493e06300007d33919063000105a1565b816006815181106300007d4d576300007d4c6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300007d85576300007d846300010539565b5b6040519080825280602002602001820160405280156300007db55781602001602082028036833780820191505090505b5090506007816000815181106300007dd4576300007dd36300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300007e0a576300007e096300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d6b6602a9139905090565b60606040518060400160405280600381526020017f6372760000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156300007ec6576300007ec56300010539565b5b6040519080825280602002602001820160405280156300007ef65781602001602082028036833780820191505090505b5090506103e860006300007f0c919063000105a1565b816000815181106300007f26576300007f256300010609565b5b6020026020010181815250506103e860016300007f45919063000105a1565b816001815181106300007f5f576300007f5e6300010609565b5b6020026020010181815250506103e860326300007f7e919063000105a1565b816002815181106300007f98576300007f976300010609565b5b6020026020010181815250506103e860646300007fb7919063000105a1565b816003815181106300007fd1576300007fd06300010609565b5b6020026020010181815250506103e860c86300007ff0919063000105a1565b81600481518110630000800a5763000080096300010609565b5b6020026020010181815250506103e86101f4630000802a919063000105a1565b8160058151811063000080445763000080436300010609565b5b6020026020010181815250506103e86103206300008064919063000105a1565b81600681518110630000807e57630000807d6300010609565b5b6020026020010181815250506103e86104b0630000809e919063000105a1565b8160078151811063000080b85763000080b76300010609565b5b6020026020010181815250506103e861064063000080d8919063000105a1565b8160088151811063000080f25763000080f16300010609565b5b6020026020010181815250506103e8610bb86300008112919063000105a1565b81600981518110630000812c57630000812b6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000081645763000081636300010539565b5b60405190808252806020026020018201604052801563000081945781602001602082028036833780820191505090505b50905060078160008151811063000081b35763000081b26300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000081e95763000081e86300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d68c602a9139905090565b60606040518060400160405280600381526020017f6376780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111563000082a55763000082a46300010539565b5b60405190808252806020026020018201604052801563000082d55781602001602082028036833780820191505090505b5090506103e8600063000082eb919063000105a1565b8160008151811063000083055763000083046300010609565b5b6020026020010181815250506103e860016300008324919063000105a1565b81600181518110630000833e57630000833d6300010609565b5b6020026020010181815250506103e86032630000835d919063000105a1565b8160028151811063000083775763000083766300010609565b5b6020026020010181815250506103e860646300008396919063000105a1565b8160038151811063000083b05763000083af6300010609565b5b6020026020010181815250506103e860c863000083cf919063000105a1565b8160048151811063000083e95763000083e86300010609565b5b6020026020010181815250506103e86101f46300008409919063000105a1565b8160058151811063000084235763000084226300010609565b5b6020026020010181815250506103e86103206300008443919063000105a1565b81600681518110630000845d57630000845c6300010609565b5b6020026020010181815250506103e86104b0630000847d919063000105a1565b8160078151811063000084975763000084966300010609565b5b6020026020010181815250506103e861064063000084b7919063000105a1565b8160088151811063000084d15763000084d06300010609565b5b6020026020010181815250506103e8610bb863000084f1919063000105a1565b81600981518110630000850b57630000850a6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000085435763000085426300010539565b5b60405190808252806020026020018201604052801563000085735781602001602082028036833780820191505090505b50905060078160008151811063000085925763000085916300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000085c85763000085c76300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d416602a9139905090565b60606040518060400160405280600381526020017f6461690000000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff81111563000086845763000086836300010539565b5b60405190808252806020026020018201604052801563000086b45781602001602082028036833780820191505090505b5090506103e8600063000086ca919063000105a1565b8160008151811063000086e45763000086e36300010609565b5b6020026020010181815250506103e8600a6300008703919063000105a1565b81600181518110630000871d57630000871c6300010609565b5b6020026020010181815250506103e8601e630000873c919063000105a1565b8160028151811063000087565763000087556300010609565b5b6020026020010181815250506103e860506300008775919063000105a1565b81600381518110630000878f57630000878e6300010609565b5b6020026020010181815250506103e860c863000087ae919063000105a1565b8160048151811063000087c85763000087c76300010609565b5b6020026020010181815250506103e86101f463000087e8919063000105a1565b8160058151811063000088025763000088016300010609565b5b6020026020010181815250506103e8806300008820919063000105a1565b81600681518110630000883a5763000088396300010609565b5b6020026020010181815250506103e86107d0630000885a919063000105a1565b8160078151811063000088745763000088736300010609565b5b6020026020010181815250506103e86113886300008894919063000105a1565b8160088151811063000088ae5763000088ad6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000088e65763000088e56300010539565b5b60405190808252806020026020018201604052801563000089165781602001602082028036833780820191505090505b50905060078160008151811063000089355763000089346300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000896b57630000896a6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d0d0602a9139905090565b60606040518060600160405280602a8152602001630001d178602a9139905090565b60606040518060400160405280600481526020017f646f676500000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff8111156300008a32576300008a316300010539565b5b6040519080825280602002602001820160405280156300008a625781602001602082028036833780820191505090505b5090506103e860006300008a78919063000105a1565b816000815181106300008a92576300008a916300010609565b5b6020026020010181815250506103e8806300008ab0919063000105a1565b816001815181106300008aca576300008ac96300010609565b5b6020026020010181815250506103e86113886300008aea919063000105a1565b816002815181106300008b04576300008b036300010609565b5b6020026020010181815250506103e8614e206300008b24919063000105a1565b816003815181106300008b3e576300008b3d6300010609565b5b6020026020010181815250506103e861c3506300008b5e919063000105a1565b816004815181106300008b78576300008b776300010609565b5b6020026020010181815250506103e8620186a06300008b99919063000105a1565b816005815181106300008bb3576300008bb26300010609565b5b6020026020010181815250506103e8620493e06300008bd4919063000105a1565b816006815181106300008bee576300008bed6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300008c26576300008c256300010539565b5b6040519080825280602002602001820160405280156300008c565781602001602082028036833780820191505090505b5090506007816000815181106300008c75576300008c746300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300008cab576300008caa6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d956602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600481526020017f6479647800000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156300008d67576300008d666300010539565b5b6040519080825280602002602001820160405280156300008d975781602001602082028036833780820191505090505b5090506103e860006300008dad919063000105a1565b816000815181106300008dc7576300008dc66300010609565b5b6020026020010181815250506103e860016300008de6919063000105a1565b816001815181106300008e00576300008dff6300010609565b5b6020026020010181815250506103e860326300008e1f919063000105a1565b816002815181106300008e39576300008e386300010609565b5b6020026020010181815250506103e860646300008e58919063000105a1565b816003815181106300008e72576300008e716300010609565b5b6020026020010181815250506103e860c86300008e91919063000105a1565b816004815181106300008eab576300008eaa6300010609565b5b6020026020010181815250506103e86101f46300008ecb919063000105a1565b816005815181106300008ee5576300008ee46300010609565b5b6020026020010181815250506103e86103206300008f05919063000105a1565b816006815181106300008f1f576300008f1e6300010609565b5b6020026020010181815250506103e86104b06300008f3f919063000105a1565b816007815181106300008f59576300008f586300010609565b5b6020026020010181815250506103e86106406300008f79919063000105a1565b816008815181106300008f93576300008f926300010609565b5b6020026020010181815250506103e8610bb86300008fb3919063000105a1565b816009815181106300008fcd576300008fcc6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000090055763000090046300010539565b5b60405190808252806020026020018201604052801563000090355781602001602082028036833780820191505090505b50905060078160008151811063000090545763000090536300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000908a5763000090896300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d0fa602a9139905090565b60606040518060400160405280600381526020017f6574630000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff81111563000091465763000091456300010539565b5b60405190808252806020026020018201604052801563000091765781602001602082028036833780820191505090505b5090506103e86000630000918c919063000105a1565b8160008151811063000091a65763000091a56300010609565b5b6020026020010181815250506103e8600163000091c5919063000105a1565b8160018151811063000091df5763000091de6300010609565b5b6020026020010181815250506103e8600563000091fe919063000105a1565b8160028151811063000092185763000092176300010609565b5b6020026020010181815250506103e860146300009237919063000105a1565b8160038151811063000092515763000092506300010609565b5b6020026020010181815250506103e860326300009270919063000105a1565b81600481518110630000928a5763000092896300010609565b5b6020026020010181815250506103e8605063000092a9919063000105a1565b8160058151811063000092c35763000092c26300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000092fb5763000092fa6300010539565b5b604051908082528060200260200182016040528015630000932b5781602001602082028036833780820191505090505b509050600781600081518110630000934a5763000093496300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000938057630000937f6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d494602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f6574680000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000943c57630000943b6300010539565b5b604051908082528060200260200182016040528015630000946c5781602001602082028036833780820191505090505b509050600081600081518110630000948b57630000948a6300010609565b5b602002602001018181525050600a8160018151811063000094b35763000094b26300010609565b5b60200260200101818152505060328160028151811063000094db5763000094da6300010609565b5b60200260200101818152505060c88160038151811063000095035763000095026300010609565b5b60200260200101818152505061025881600481518110630000952c57630000952b6300010609565b5b6020026020010181815250506104b08160058151811063000095555763000095546300010609565b5b602002602001018181525050610bb881600681518110630000957e57630000957d6300010609565b5b602002602001018181525050611f408160078151811063000095a75763000095a66300010609565b5b602002602001018181525050614e208160088151811063000095d05763000095cf6300010609565b5b60200260200101818152505061c3508160098151811063000095f95763000095f86300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111563000096315763000096306300010539565b5b60405190808252806020026020018201604052801563000096615781602001602082028036833780820191505090505b509050600781600081518110630000968057630000967f6300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000096b65763000096b56300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d7b2602a9139905090565b60606040518060400160405280600c81526020017f4e617469766520546f6b656e0000000000000000000000000000000000000000815250905090565b60606040518060400160405280600381526020017f66696c0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff81111563000097985763000097976300010539565b5b60405190808252806020026020018201604052801563000097c85781602001602082028036833780820191505090505b5090506103e8600063000097de919063000105a1565b8160008151811063000097f85763000097f76300010609565b5b6020026020010181815250506103e8600a6300009817919063000105a1565b8160018151811063000098315763000098306300010609565b5b6020026020010181815250506103e8601e6300009850919063000105a1565b81600281518110630000986a5763000098696300010609565b5b6020026020010181815250506103e860506300009889919063000105a1565b8160038151811063000098a35763000098a26300010609565b5b6020026020010181815250506103e860c863000098c2919063000105a1565b8160048151811063000098dc5763000098db6300010609565b5b6020026020010181815250506103e86101f463000098fc919063000105a1565b8160058151811063000099165763000099156300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000994e57630000994d6300010539565b5b604051908082528060200260200182016040528015630000997e5781602001602082028036833780820191505090505b509050600781600081518110630000999d57630000999c6300010609565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811063000099d35763000099d26300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d31c602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f6772740000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156300009a8f576300009a8e6300010539565b5b6040519080825280602002602001820160405280156300009abf5781602001602082028036833780820191505090505b5090506103e860006300009ad5919063000105a1565b816000815181106300009aef576300009aee6300010609565b5b6020026020010181815250506103e860016300009b0e919063000105a1565b816001815181106300009b28576300009b276300010609565b5b6020026020010181815250506103e860326300009b47919063000105a1565b816002815181106300009b61576300009b606300010609565b5b6020026020010181815250506103e860646300009b80919063000105a1565b816003815181106300009b9a576300009b996300010609565b5b6020026020010181815250506103e860c86300009bb9919063000105a1565b816004815181106300009bd3576300009bd26300010609565b5b6020026020010181815250506103e86101f46300009bf3919063000105a1565b816005815181106300009c0d576300009c0c6300010609565b5b6020026020010181815250506103e86103206300009c2d919063000105a1565b816006815181106300009c47576300009c466300010609565b5b6020026020010181815250506103e86104b06300009c67919063000105a1565b816007815181106300009c81576300009c806300010609565b5b6020026020010181815250506103e86106406300009ca1919063000105a1565b816008815181106300009cbb576300009cba6300010609565b5b6020026020010181815250506103e8610bb86300009cdb919063000105a1565b816009815181106300009cf5576300009cf46300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156300009d2d576300009d2c6300010539565b5b6040519080825280602002602001820160405280156300009d5d5781602001602082028036833780820191505090505b5090506007816000815181106300009d7c576300009d7b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106300009db2576300009db16300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d5ba602a9139905090565b60606040518060600160405280602a8152602001630001d884602a9139905090565b60606040518060400160405280600381526020017f6774630000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156300009e79576300009e786300010539565b5b6040519080825280602002602001820160405280156300009ea95781602001602082028036833780820191505090505b5090506103e860006300009ebf919063000105a1565b816000815181106300009ed9576300009ed86300010609565b5b6020026020010181815250506103e860016300009ef8919063000105a1565b816001815181106300009f12576300009f116300010609565b5b6020026020010181815250506103e860326300009f31919063000105a1565b816002815181106300009f4b576300009f4a6300010609565b5b6020026020010181815250506103e860646300009f6a919063000105a1565b816003815181106300009f84576300009f836300010609565b5b6020026020010181815250506103e860c86300009fa3919063000105a1565b816004815181106300009fbd576300009fbc6300010609565b5b6020026020010181815250506103e86101f46300009fdd919063000105a1565b816005815181106300009ff7576300009ff66300010609565b5b6020026020010181815250506103e8610320630000a017919063000105a1565b81600681518110630000a03157630000a0306300010609565b5b6020026020010181815250506103e86104b0630000a051919063000105a1565b81600781518110630000a06b57630000a06a6300010609565b5b6020026020010181815250506103e8610640630000a08b919063000105a1565b81600881518110630000a0a557630000a0a46300010609565b5b6020026020010181815250506103e8610bb8630000a0c5919063000105a1565b81600981518110630000a0df57630000a0de6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000a11757630000a1166300010539565b5b604051908082528060200260200182016040528015630000a1475781602001602082028036833780820191505090505b509050600781600081518110630000a16657630000a1656300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000a19c57630000a19b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d274602a9139905090565b60606040518060400160405280600481526020017f6775736400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000a25857630000a2576300010539565b5b604051908082528060200260200182016040528015630000a2885781602001602082028036833780820191505090505b5090506103e86000630000a29e919063000105a1565b81600081518110630000a2b857630000a2b76300010609565b5b6020026020010181815250506103e86001630000a2d7919063000105a1565b81600181518110630000a2f157630000a2f06300010609565b5b6020026020010181815250506103e86032630000a310919063000105a1565b81600281518110630000a32a57630000a3296300010609565b5b6020026020010181815250506103e86064630000a349919063000105a1565b81600381518110630000a36357630000a3626300010609565b5b6020026020010181815250506103e860c8630000a382919063000105a1565b81600481518110630000a39c57630000a39b6300010609565b5b6020026020010181815250506103e86101f4630000a3bc919063000105a1565b81600581518110630000a3d657630000a3d56300010609565b5b6020026020010181815250506103e8610320630000a3f6919063000105a1565b81600681518110630000a41057630000a40f6300010609565b5b6020026020010181815250506103e86104b0630000a430919063000105a1565b81600781518110630000a44a57630000a4496300010609565b5b6020026020010181815250506103e8610640630000a46a919063000105a1565b81600881518110630000a48457630000a4836300010609565b5b6020026020010181815250506103e8610bb8630000a4a4919063000105a1565b81600981518110630000a4be57630000a4bd6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000a4f657630000a4f56300010539565b5b604051908082528060200260200182016040528015630000a5265781602001602082028036833780820191505090505b509050600781600081518110630000a54557630000a5446300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000a57b57630000a57a6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d1cc602a9139905090565b60606040518060400160405280600381526020017f696d780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff811115630000a63757630000a6366300010539565b5b604051908082528060200260200182016040528015630000a6675781602001602082028036833780820191505090505b5090506103e86000630000a67d919063000105a1565b81600081518110630000a69757630000a6966300010609565b5b6020026020010181815250506103e8600a630000a6b6919063000105a1565b81600181518110630000a6d057630000a6cf6300010609565b5b6020026020010181815250506103e8601e630000a6ef919063000105a1565b81600281518110630000a70957630000a7086300010609565b5b6020026020010181815250506103e86050630000a728919063000105a1565b81600381518110630000a74257630000a7416300010609565b5b6020026020010181815250506103e860c8630000a761919063000105a1565b81600481518110630000a77b57630000a77a6300010609565b5b6020026020010181815250506103e86101f4630000a79b919063000105a1565b81600581518110630000a7b557630000a7b46300010609565b5b6020026020010181815250506103e880630000a7d3919063000105a1565b81600681518110630000a7ed57630000a7ec6300010609565b5b6020026020010181815250506103e86107d0630000a80d919063000105a1565b81600781518110630000a82757630000a8266300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000a85f57630000a85e6300010539565b5b604051908082528060200260200182016040528015630000a88f5781602001602082028036833780820191505090505b509050600781600081518110630000a8ae57630000a8ad6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000a8e457630000a8e36300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d788602a9139905090565b60606040518060400160405280600381526020017f696e6a0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff811115630000a9a057630000a99f6300010539565b5b604051908082528060200260200182016040528015630000a9d05781602001602082028036833780820191505090505b5090506103e86000630000a9e6919063000105a1565b81600081518110630000aa0057630000a9ff6300010609565b5b6020026020010181815250506103e86001630000aa1f919063000105a1565b81600181518110630000aa3957630000aa386300010609565b5b6020026020010181815250506103e86005630000aa58919063000105a1565b81600281518110630000aa7257630000aa716300010609565b5b6020026020010181815250506103e86014630000aa91919063000105a1565b81600381518110630000aaab57630000aaaa6300010609565b5b6020026020010181815250506103e86032630000aaca919063000105a1565b81600481518110630000aae457630000aae36300010609565b5b6020026020010181815250506103e86050630000ab03919063000105a1565b81600581518110630000ab1d57630000ab1c6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000ab5557630000ab546300010539565b5b604051908082528060200260200182016040528015630000ab855781602001602082028036833780820191505090505b509050600781600081518110630000aba457630000aba36300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000abda57630000abd96300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d6b6602a9139905090565b60606040518060400160405280600381526020017f6c656f0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff811115630000ac9657630000ac956300010539565b5b604051908082528060200260200182016040528015630000acc65781602001602082028036833780820191505090505b5090506103e86000630000acdc919063000105a1565b81600081518110630000acf657630000acf56300010609565b5b6020026020010181815250506103e8600a630000ad15919063000105a1565b81600181518110630000ad2f57630000ad2e6300010609565b5b6020026020010181815250506103e8601e630000ad4e919063000105a1565b81600281518110630000ad6857630000ad676300010609565b5b6020026020010181815250506103e86050630000ad87919063000105a1565b81600381518110630000ada157630000ada06300010609565b5b6020026020010181815250506103e860c8630000adc0919063000105a1565b81600481518110630000adda57630000add96300010609565b5b6020026020010181815250506103e86101f4630000adfa919063000105a1565b81600581518110630000ae1457630000ae136300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000ae4c57630000ae4b6300010539565b5b604051908082528060200260200182016040528015630000ae7c5781602001602082028036833780820191505090505b509050600781600081518110630000ae9b57630000ae9a6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000aed157630000aed06300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d220602a9139905090565b60606040518060400160405280600481526020017f6c696e6b00000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000af8d57630000af8c6300010539565b5b604051908082528060200260200182016040528015630000afbd5781602001602082028036833780820191505090505b5090506103e86000630000afd3919063000105a1565b81600081518110630000afed57630000afec6300010609565b5b6020026020010181815250506103e86001630000b00c919063000105a1565b81600181518110630000b02657630000b0256300010609565b5b6020026020010181815250506103e86032630000b045919063000105a1565b81600281518110630000b05f57630000b05e6300010609565b5b6020026020010181815250506103e86064630000b07e919063000105a1565b81600381518110630000b09857630000b0976300010609565b5b6020026020010181815250506103e860c8630000b0b7919063000105a1565b81600481518110630000b0d157630000b0d06300010609565b5b6020026020010181815250506103e86101f4630000b0f1919063000105a1565b81600581518110630000b10b57630000b10a6300010609565b5b6020026020010181815250506103e8610320630000b12b919063000105a1565b81600681518110630000b14557630000b1446300010609565b5b6020026020010181815250506103e86104b0630000b165919063000105a1565b81600781518110630000b17f57630000b17e6300010609565b5b6020026020010181815250506103e8610640630000b19f919063000105a1565b81600881518110630000b1b957630000b1b86300010609565b5b6020026020010181815250506103e8610bb8630000b1d9919063000105a1565b81600981518110630000b1f357630000b1f26300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000b22b57630000b22a6300010539565b5b604051908082528060200260200182016040528015630000b25b5781602001602082028036833780820191505090505b509050600781600081518110630000b27a57630000b2796300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000b2b057630000b2af6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d36e602a9139905090565b60606040518060600160405280602a8152602001630001d0a6602a9139905090565b60606040518060400160405280600381526020017f6c69740000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000b37757630000b3766300010539565b5b604051908082528060200260200182016040528015630000b3a75781602001602082028036833780820191505090505b5090506103e86000630000b3bd919063000105a1565b81600081518110630000b3d757630000b3d66300010609565b5b6020026020010181815250506103e86001630000b3f6919063000105a1565b81600181518110630000b41057630000b40f6300010609565b5b6020026020010181815250506103e86032630000b42f919063000105a1565b81600281518110630000b44957630000b4486300010609565b5b6020026020010181815250506103e86064630000b468919063000105a1565b81600381518110630000b48257630000b4816300010609565b5b6020026020010181815250506103e860c8630000b4a1919063000105a1565b81600481518110630000b4bb57630000b4ba6300010609565b5b6020026020010181815250506103e86101f4630000b4db919063000105a1565b81600581518110630000b4f557630000b4f46300010609565b5b6020026020010181815250506103e8610320630000b515919063000105a1565b81600681518110630000b52f57630000b52e6300010609565b5b6020026020010181815250506103e86104b0630000b54f919063000105a1565b81600781518110630000b56957630000b5686300010609565b5b6020026020010181815250506103e8610640630000b589919063000105a1565b81600881518110630000b5a357630000b5a26300010609565b5b6020026020010181815250506103e8610bb8630000b5c3919063000105a1565b81600981518110630000b5dd57630000b5dc6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000b61557630000b6146300010539565b5b604051908082528060200260200182016040528015630000b6455781602001602082028036833780820191505090505b509050600781600081518110630000b66457630000b6636300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000b69a57630000b6996300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d5e4602a9139905090565b60606040518060600160405280602a8152602001630001d5e4602a9139905090565b60606040518060400160405280600581526020017f6d61746963000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000b76157630000b7606300010539565b5b604051908082528060200260200182016040528015630000b7915781602001602082028036833780820191505090505b5090506103e86000630000b7a7919063000105a1565b81600081518110630000b7c157630000b7c06300010609565b5b6020026020010181815250506103e86001630000b7e0919063000105a1565b81600181518110630000b7fa57630000b7f96300010609565b5b6020026020010181815250506103e86032630000b819919063000105a1565b81600281518110630000b83357630000b8326300010609565b5b6020026020010181815250506103e86064630000b852919063000105a1565b81600381518110630000b86c57630000b86b6300010609565b5b6020026020010181815250506103e860c8630000b88b919063000105a1565b81600481518110630000b8a557630000b8a46300010609565b5b6020026020010181815250506103e86101f4630000b8c5919063000105a1565b81600581518110630000b8df57630000b8de6300010609565b5b6020026020010181815250506103e8610320630000b8ff919063000105a1565b81600681518110630000b91957630000b9186300010609565b5b6020026020010181815250506103e86104b0630000b939919063000105a1565b81600781518110630000b95357630000b9526300010609565b5b6020026020010181815250506103e8610640630000b973919063000105a1565b81600881518110630000b98d57630000b98c6300010609565b5b6020026020010181815250506103e8610bb8630000b9ad919063000105a1565b81600981518110630000b9c757630000b9c66300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000b9ff57630000b9fe6300010539565b5b604051908082528060200260200182016040528015630000ba2f5781602001602082028036833780820191505090505b509050600781600081518110630000ba4e57630000ba4d6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000ba8457630000ba836300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d398602a9139905090565b60606040518060600160405280602a8152602001630001d8ae602a9139905090565b60606040518060400160405280600481526020017f6d63727400000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff811115630000bb4b57630000bb4a6300010539565b5b604051908082528060200260200182016040528015630000bb7b5781602001602082028036833780820191505090505b5090506103e86000630000bb91919063000105a1565b81600081518110630000bbab57630000bbaa6300010609565b5b6020026020010181815250506103e86107d0630000bbcb919063000105a1565b81600181518110630000bbe557630000bbe46300010609565b5b6020026020010181815250506103e8612710630000bc05919063000105a1565b81600281518110630000bc1f57630000bc1e6300010609565b5b6020026020010181815250506103e861c350630000bc3f919063000105a1565b81600381518110630000bc5957630000bc586300010609565b5b6020026020010181815250506103e8620249f0630000bc7a919063000105a1565b81600481518110630000bc9457630000bc936300010609565b5b6020026020010181815250506103e86207a120630000bcb5919063000105a1565b81600581518110630000bccf57630000bcce6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000bd0757630000bd066300010539565b5b604051908082528060200260200182016040528015630000bd375781602001602082028036833780820191505090505b509050600781600081518110630000bd5657630000bd556300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000bd8c57630000bd8b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d440602a9139905090565b60606040518060600160405280602a8152602001630001d4be602a9139905090565b60606040518060400160405280600381526020017f6e66700000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000be5357630000be526300010539565b5b604051908082528060200260200182016040528015630000be835781602001602082028036833780820191505090505b5090506103e86000630000be99919063000105a1565b81600081518110630000beb357630000beb26300010609565b5b6020026020010181815250506103e86001630000bed2919063000105a1565b81600181518110630000beec57630000beeb6300010609565b5b6020026020010181815250506103e86032630000bf0b919063000105a1565b81600281518110630000bf2557630000bf246300010609565b5b6020026020010181815250506103e86064630000bf44919063000105a1565b81600381518110630000bf5e57630000bf5d6300010609565b5b6020026020010181815250506103e860c8630000bf7d919063000105a1565b81600481518110630000bf9757630000bf966300010609565b5b6020026020010181815250506103e86101f4630000bfb7919063000105a1565b81600581518110630000bfd157630000bfd06300010609565b5b6020026020010181815250506103e8610320630000bff1919063000105a1565b81600681518110630000c00b57630000c00a6300010609565b5b6020026020010181815250506103e86104b0630000c02b919063000105a1565b81600781518110630000c04557630000c0446300010609565b5b6020026020010181815250506103e8610640630000c065919063000105a1565b81600881518110630000c07f57630000c07e6300010609565b5b6020026020010181815250506103e8610bb8630000c09f919063000105a1565b81600981518110630000c0b957630000c0b86300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000c0f157630000c0f06300010539565b5b604051908082528060200260200182016040528015630000c1215781602001602082028036833780820191505090505b509050600781600081518110630000c14057630000c13f6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000c17657630000c1756300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d60e602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600681526020017f70656f706c650000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000c23257630000c2316300010539565b5b604051908082528060200260200182016040528015630000c2625781602001602082028036833780820191505090505b5090506103e86000630000c278919063000105a1565b81600081518110630000c29257630000c2916300010609565b5b6020026020010181815250506103e86001630000c2b1919063000105a1565b81600181518110630000c2cb57630000c2ca6300010609565b5b6020026020010181815250506103e86032630000c2ea919063000105a1565b81600281518110630000c30457630000c3036300010609565b5b6020026020010181815250506103e86064630000c323919063000105a1565b81600381518110630000c33d57630000c33c6300010609565b5b6020026020010181815250506103e860c8630000c35c919063000105a1565b81600481518110630000c37657630000c3756300010609565b5b6020026020010181815250506103e86101f4630000c396919063000105a1565b81600581518110630000c3b057630000c3af6300010609565b5b6020026020010181815250506103e8610320630000c3d0919063000105a1565b81600681518110630000c3ea57630000c3e96300010609565b5b6020026020010181815250506103e86104b0630000c40a919063000105a1565b81600781518110630000c42457630000c4236300010609565b5b6020026020010181815250506103e8610640630000c444919063000105a1565b81600881518110630000c45e57630000c45d6300010609565b5b6020026020010181815250506103e8610bb8630000c47e919063000105a1565b81600981518110630000c49857630000c4976300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000c4d057630000c4cf6300010539565b5b604051908082528060200260200182016040528015630000c5005781602001602082028036833780820191505090505b509050600781600081518110630000c51f57630000c51e6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000c55557630000c5546300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d1f6602a9139905090565b60606040518060400160405280600481526020017f7368696200000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff811115630000c61157630000c6106300010539565b5b604051908082528060200260200182016040528015630000c6415781602001602082028036833780820191505090505b5090506103e86000630000c657919063000105a1565b81600081518110630000c67157630000c6706300010609565b5b6020026020010181815250506103e862061a80630000c692919063000105a1565b81600181518110630000c6ac57630000c6ab6300010609565b5b6020026020010181815250506103e8621e8480630000c6cd919063000105a1565b81600281518110630000c6e757630000c6e66300010609565b5b6020026020010181815250506103e862989680630000c708919063000105a1565b81600381518110630000c72257630000c7216300010609565b5b6020026020010181815250506103e86301312d00630000c744919063000105a1565b81600481518110630000c75e57630000c75d6300010609565b5b6020026020010181815250506103e86302625a00630000c780919063000105a1565b81600581518110630000c79a57630000c7996300010609565b5b6020026020010181815250506103e86305f5e100630000c7bc919063000105a1565b81600681518110630000c7d657630000c7d56300010609565b5b6020026020010181815250506103e8630bebc200630000c7f8919063000105a1565b81600781518110630000c81257630000c8116300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000c84a57630000c8496300010539565b5b604051908082528060200260200182016040528015630000c87a5781602001602082028036833780820191505090505b509050600781600081518110630000c89957630000c8986300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000c8cf57630000c8ce6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d3c2602a9139905090565b60606040518060400160405280600381526020017f736f6c0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000c98b57630000c98a6300010539565b5b604051908082528060200260200182016040528015630000c9bb5781602001602082028036833780820191505090505b5090506103e86000630000c9d1919063000105a1565b81600081518110630000c9eb57630000c9ea6300010609565b5b6020026020010181815250506103e86001630000ca0a919063000105a1565b81600181518110630000ca2457630000ca236300010609565b5b6020026020010181815250506103e86032630000ca43919063000105a1565b81600281518110630000ca5d57630000ca5c6300010609565b5b6020026020010181815250506103e86064630000ca7c919063000105a1565b81600381518110630000ca9657630000ca956300010609565b5b6020026020010181815250506103e860c8630000cab5919063000105a1565b81600481518110630000cacf57630000cace6300010609565b5b6020026020010181815250506103e86101f4630000caef919063000105a1565b81600581518110630000cb0957630000cb086300010609565b5b6020026020010181815250506103e8610320630000cb29919063000105a1565b81600681518110630000cb4357630000cb426300010609565b5b6020026020010181815250506103e86104b0630000cb63919063000105a1565b81600781518110630000cb7d57630000cb7c6300010609565b5b6020026020010181815250506103e8610640630000cb9d919063000105a1565b81600881518110630000cbb757630000cbb66300010609565b5b6020026020010181815250506103e8610bb8630000cbd7919063000105a1565b81600981518110630000cbf157630000cbf06300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000cc2957630000cc286300010539565b5b604051908082528060200260200182016040528015630000cc595781602001602082028036833780820191505090505b509050600781600081518110630000cc7857630000cc776300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000ccae57630000ccad6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d734602a9139905090565b60606040518060600160405280602a8152602001630001d85a602a9139905090565b60606040518060400160405280600781526020017f7370616365696400000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000cd7557630000cd746300010539565b5b604051908082528060200260200182016040528015630000cda55781602001602082028036833780820191505090505b5090506103e86000630000cdbb919063000105a1565b81600081518110630000cdd557630000cdd46300010609565b5b6020026020010181815250506103e86001630000cdf4919063000105a1565b81600181518110630000ce0e57630000ce0d6300010609565b5b6020026020010181815250506103e86032630000ce2d919063000105a1565b81600281518110630000ce4757630000ce466300010609565b5b6020026020010181815250506103e86064630000ce66919063000105a1565b81600381518110630000ce8057630000ce7f6300010609565b5b6020026020010181815250506103e860c8630000ce9f919063000105a1565b81600481518110630000ceb957630000ceb86300010609565b5b6020026020010181815250506103e86101f4630000ced9919063000105a1565b81600581518110630000cef357630000cef26300010609565b5b6020026020010181815250506103e8610320630000cf13919063000105a1565b81600681518110630000cf2d57630000cf2c6300010609565b5b6020026020010181815250506103e86104b0630000cf4d919063000105a1565b81600781518110630000cf6757630000cf666300010609565b5b6020026020010181815250506103e8610640630000cf87919063000105a1565b81600881518110630000cfa157630000cfa06300010609565b5b6020026020010181815250506103e8610bb8630000cfc1919063000105a1565b81600981518110630000cfdb57630000cfda6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000d01357630000d0126300010539565b5b604051908082528060200260200182016040528015630000d0435781602001602082028036833780820191505090505b509050600781600081518110630000d06257630000d0616300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000d09857630000d0976300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d830602a9139905090565b60606040518060600160405280602a8152602001630001d830602a9139905090565b60606040518060400160405280600381526020017f746f6e0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000d15f57630000d15e6300010539565b5b604051908082528060200260200182016040528015630000d18f5781602001602082028036833780820191505090505b5090506103e86000630000d1a5919063000105a1565b81600081518110630000d1bf57630000d1be6300010609565b5b6020026020010181815250506103e86001630000d1de919063000105a1565b81600181518110630000d1f857630000d1f76300010609565b5b6020026020010181815250506103e86032630000d217919063000105a1565b81600281518110630000d23157630000d2306300010609565b5b6020026020010181815250506103e86064630000d250919063000105a1565b81600381518110630000d26a57630000d2696300010609565b5b6020026020010181815250506103e860c8630000d289919063000105a1565b81600481518110630000d2a357630000d2a26300010609565b5b6020026020010181815250506103e86101f4630000d2c3919063000105a1565b81600581518110630000d2dd57630000d2dc6300010609565b5b6020026020010181815250506103e8610320630000d2fd919063000105a1565b81600681518110630000d31757630000d3166300010609565b5b6020026020010181815250506103e86104b0630000d337919063000105a1565b81600781518110630000d35157630000d3506300010609565b5b6020026020010181815250506103e8610640630000d371919063000105a1565b81600881518110630000d38b57630000d38a6300010609565b5b6020026020010181815250506103e8610bb8630000d3ab919063000105a1565b81600981518110630000d3c557630000d3c46300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000d3fd57630000d3fc6300010539565b5b604051908082528060200260200182016040528015630000d42d5781602001602082028036833780820191505090505b509050600781600081518110630000d44c57630000d44b6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000d48257630000d4816300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d29e602a9139905090565b60606040518060600160405280602a8152602001630001d590602a9139905090565b60606040518060400160405280600381526020017f7472780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000d54957630000d5486300010539565b5b604051908082528060200260200182016040528015630000d5795781602001602082028036833780820191505090505b5090506103e86000630000d58f919063000105a1565b81600081518110630000d5a957630000d5a86300010609565b5b6020026020010181815250506103e86001630000d5c8919063000105a1565b81600181518110630000d5e257630000d5e16300010609565b5b6020026020010181815250506103e86032630000d601919063000105a1565b81600281518110630000d61b57630000d61a6300010609565b5b6020026020010181815250506103e86064630000d63a919063000105a1565b81600381518110630000d65457630000d6536300010609565b5b6020026020010181815250506103e860c8630000d673919063000105a1565b81600481518110630000d68d57630000d68c6300010609565b5b6020026020010181815250506103e86101f4630000d6ad919063000105a1565b81600581518110630000d6c757630000d6c66300010609565b5b6020026020010181815250506103e8610320630000d6e7919063000105a1565b81600681518110630000d70157630000d7006300010609565b5b6020026020010181815250506103e86104b0630000d721919063000105a1565b81600781518110630000d73b57630000d73a6300010609565b5b6020026020010181815250506103e8610640630000d75b919063000105a1565b81600881518110630000d77557630000d7746300010609565b5b6020026020010181815250506103e8610bb8630000d795919063000105a1565b81600981518110630000d7af57630000d7ae6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000d7e757630000d7e66300010539565b5b604051908082528060200260200182016040528015630000d8175781602001602082028036833780820191505090505b509050600781600081518110630000d83657630000d8356300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000d86c57630000d86b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d3ec602a9139905090565b60606040518060600160405280602a8152602001630001d70a602a9139905090565b60606040518060400160405280600481526020017f7475736400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000d93357630000d9326300010539565b5b604051908082528060200260200182016040528015630000d9635781602001602082028036833780820191505090505b5090506103e86000630000d979919063000105a1565b81600081518110630000d99357630000d9926300010609565b5b6020026020010181815250506103e86001630000d9b2919063000105a1565b81600181518110630000d9cc57630000d9cb6300010609565b5b6020026020010181815250506103e86032630000d9eb919063000105a1565b81600281518110630000da0557630000da046300010609565b5b6020026020010181815250506103e86064630000da24919063000105a1565b81600381518110630000da3e57630000da3d6300010609565b5b6020026020010181815250506103e860c8630000da5d919063000105a1565b81600481518110630000da7757630000da766300010609565b5b6020026020010181815250506103e86101f4630000da97919063000105a1565b81600581518110630000dab157630000dab06300010609565b5b6020026020010181815250506103e8610320630000dad1919063000105a1565b81600681518110630000daeb57630000daea6300010609565b5b6020026020010181815250506103e86104b0630000db0b919063000105a1565b81600781518110630000db2557630000db246300010609565b5b6020026020010181815250506103e8610640630000db45919063000105a1565b81600881518110630000db5f57630000db5e6300010609565b5b6020026020010181815250506103e8610bb8630000db7f919063000105a1565b81600981518110630000db9957630000db986300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000dbd157630000dbd06300010539565b5b604051908082528060200260200182016040528015630000dc015781602001602082028036833780820191505090505b509050600781600081518110630000dc2057630000dc1f6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000dc5657630000dc556300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d1a2602a9139905090565b60606040518060600160405280602a8152602001630001d2c8602a9139905090565b60606040518060400160405280600381526020017f756e690000000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff811115630000dd1d57630000dd1c6300010539565b5b604051908082528060200260200182016040528015630000dd4d5781602001602082028036833780820191505090505b5090506103e86000630000dd63919063000105a1565b81600081518110630000dd7d57630000dd7c6300010609565b5b6020026020010181815250506103e8600a630000dd9c919063000105a1565b81600181518110630000ddb657630000ddb56300010609565b5b6020026020010181815250506103e8601e630000ddd5919063000105a1565b81600281518110630000ddef57630000ddee6300010609565b5b6020026020010181815250506103e86050630000de0e919063000105a1565b81600381518110630000de2857630000de276300010609565b5b6020026020010181815250506103e860c8630000de47919063000105a1565b81600481518110630000de6157630000de606300010609565b5b6020026020010181815250506103e86101f4630000de81919063000105a1565b81600581518110630000de9b57630000de9a6300010609565b5b6020026020010181815250506103e880630000deb9919063000105a1565b81600681518110630000ded357630000ded26300010609565b5b6020026020010181815250506103e86107d0630000def3919063000105a1565b81600781518110630000df0d57630000df0c6300010609565b5b6020026020010181815250506103e8611388630000df2d919063000105a1565b81600881518110630000df4757630000df466300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000df7f57630000df7e6300010539565b5b604051908082528060200260200182016040528015630000dfaf5781602001602082028036833780820191505090505b509050600781600081518110630000dfce57630000dfcd6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000e00457630000e0036300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d4e8602a9139905090565b60606040518060600160405280602a8152602001630001d92c602a9139905090565b60606040518060400160405280600481526020017f7573646300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff811115630000e0cb57630000e0ca6300010539565b5b604051908082528060200260200182016040528015630000e0fb5781602001602082028036833780820191505090505b5090506103e86000630000e111919063000105a1565b81600081518110630000e12b57630000e12a6300010609565b5b6020026020010181815250506103e8600a630000e14a919063000105a1565b81600181518110630000e16457630000e1636300010609565b5b6020026020010181815250506103e8601e630000e183919063000105a1565b81600281518110630000e19d57630000e19c6300010609565b5b6020026020010181815250506103e86050630000e1bc919063000105a1565b81600381518110630000e1d657630000e1d56300010609565b5b6020026020010181815250506103e860c8630000e1f5919063000105a1565b81600481518110630000e20f57630000e20e6300010609565b5b6020026020010181815250506103e86101f4630000e22f919063000105a1565b81600581518110630000e24957630000e2486300010609565b5b6020026020010181815250506103e880630000e267919063000105a1565b81600681518110630000e28157630000e2806300010609565b5b6020026020010181815250506103e86107d0630000e2a1919063000105a1565b81600781518110630000e2bb57630000e2ba6300010609565b5b6020026020010181815250506103e8611388630000e2db919063000105a1565b81600881518110630000e2f557630000e2f46300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000e32d57630000e32c6300010539565b5b604051908082528060200260200182016040528015630000e35d5781602001602082028036833780820191505090505b509050600781600081518110630000e37c57630000e37b6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000e3b257630000e3b16300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d124602a9139905090565b60606040518060600160405280602a8152602001630001d638602a9139905090565b60606040518060400160405280600481526020017f7573646400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000e47957630000e4786300010539565b5b604051908082528060200260200182016040528015630000e4a95781602001602082028036833780820191505090505b5090506103e86000630000e4bf919063000105a1565b81600081518110630000e4d957630000e4d86300010609565b5b6020026020010181815250506103e86001630000e4f8919063000105a1565b81600181518110630000e51257630000e5116300010609565b5b6020026020010181815250506103e86032630000e531919063000105a1565b81600281518110630000e54b57630000e54a6300010609565b5b6020026020010181815250506103e86064630000e56a919063000105a1565b81600381518110630000e58457630000e5836300010609565b5b6020026020010181815250506103e860c8630000e5a3919063000105a1565b81600481518110630000e5bd57630000e5bc6300010609565b5b6020026020010181815250506103e86101f4630000e5dd919063000105a1565b81600581518110630000e5f757630000e5f66300010609565b5b6020026020010181815250506103e8610320630000e617919063000105a1565b81600681518110630000e63157630000e6306300010609565b5b6020026020010181815250506103e86104b0630000e651919063000105a1565b81600781518110630000e66b57630000e66a6300010609565b5b6020026020010181815250506103e8610640630000e68b919063000105a1565b81600881518110630000e6a557630000e6a46300010609565b5b6020026020010181815250506103e8610bb8630000e6c5919063000105a1565b81600981518110630000e6df57630000e6de6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000e71757630000e7166300010539565b5b604051908082528060200260200182016040528015630000e7475781602001602082028036833780820191505090505b509050600781600081518110630000e76657630000e7656300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000e79c57630000e79b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d8d8602a9139905090565b60606040518060600160405280602a8152602001630001d14e602a9139905090565b60606040518060400160405280600481526020017f7573647400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115630000e86357630000e8626300010539565b5b604051908082528060200260200182016040528015630000e8935781602001602082028036833780820191505090505b5090506103e86000630000e8a9919063000105a1565b81600081518110630000e8c357630000e8c26300010609565b5b6020026020010181815250506103e86001630000e8e2919063000105a1565b81600181518110630000e8fc57630000e8fb6300010609565b5b6020026020010181815250506103e86032630000e91b919063000105a1565b81600281518110630000e93557630000e9346300010609565b5b6020026020010181815250506103e86064630000e954919063000105a1565b81600381518110630000e96e57630000e96d6300010609565b5b6020026020010181815250506103e860c8630000e98d919063000105a1565b81600481518110630000e9a757630000e9a66300010609565b5b6020026020010181815250506103e86101f4630000e9c7919063000105a1565b81600581518110630000e9e157630000e9e06300010609565b5b6020026020010181815250506103e8610320630000ea01919063000105a1565b81600681518110630000ea1b57630000ea1a6300010609565b5b6020026020010181815250506103e86104b0630000ea3b919063000105a1565b81600781518110630000ea5557630000ea546300010609565b5b6020026020010181815250506103e8610640630000ea75919063000105a1565b81600881518110630000ea8f57630000ea8e6300010609565b5b6020026020010181815250506103e8610bb8630000eaaf919063000105a1565b81600981518110630000eac957630000eac86300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000eb0157630000eb006300010539565b5b604051908082528060200260200182016040528015630000eb315781602001602082028036833780820191505090505b509050600781600081518110630000eb5057630000eb4f6300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000eb8657630000eb856300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a8152602001630001d806602a9139905090565b60606040518060600160405280602a8152602001630001d68c602a9139905090565b60606040518060400160405280600481526020017f7762746300000000000000000000000000000000000000000000000000000000815250905090565b60606000600e67ffffffffffffffff811115630000ec4d57630000ec4c6300010539565b5b604051908082528060200260200182016040528015630000ec7d5781602001602082028036833780820191505090505b509050600081600081518110630000ec9c57630000ec9b6300010609565b5b602002602001018181525050600181600181518110630000ecc457630000ecc36300010609565b5b602002602001018181525050606481600281518110630000ecec57630000eceb6300010609565b5b60200260200101818152505061012c81600381518110630000ed1557630000ed146300010609565b5b60200260200101818152505061025881600481518110630000ed3e57630000ed3d6300010609565b5b6020026020010181815250506103e881600581518110630000ed6757630000ed666300010609565b5b6020026020010181815250506107d081600681518110630000ed9057630000ed8f6300010609565b5b60200260200101818152505061138881600781518110630000edb957630000edb86300010609565b5b60200260200101818152505061271081600881518110630000ede257630000ede16300010609565b5b602002602001018181525050613a9881600981518110630000ee0b57630000ee0a6300010609565b5b6020026020010181815250506161a881600a81518110630000ee3457630000ee336300010609565b5b60200260200101818152505061753081600b81518110630000ee5d57630000ee5c6300010609565b5b602002602001018181525050619c4081600c81518110630000ee8657630000ee856300010609565b5b60200260200101818152505061c35081600d81518110630000eeaf57630000eeae6300010609565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115630000eee757630000eee66300010539565b5b604051908082528060200260200182016040528015630000ef175781602001602082028036833780820191505090505b509050600781600081518110630000ef3657630000ef356300010609565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110630000ef6c57630000ef6b6300010609565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a8152602001630001d46a602a9139905090565b828054630000efd6906300010667565b90600052602060002090601f016020900481019282630000effc5760008555630000f04d565b82601f10630000f01957805160ff1916838001178555630000f04d565b82800160010185558215630000f04d579182015b82811115630000f04c578251825591602001919060010190630000f02d565b5b509050630000f05e9190630000f177565b5090565b828054828255906000526020600020908101928215630000f0a4579160200282015b82811115630000f0a3578251825591602001919060010190630000f084565b5b509050630000f0b59190630000f177565b5090565b82805482825590600052602060002090600701600890048101928215630000f1625791602002820160005b83821115630000f12c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302630000f0e4565b8015630000f1605782816101000a81549063ffffffff0219169055600401602081600301049283019260010302630000f12c565b505b509050630000f1739190630000f177565b5090565b5b80821115630000f194576000816000905550600101630000f178565b5090565b600081905092915050565b7f6274637300000000000000000000000000000000000000000000000000000000600082015250565b6000630000f1dd600483630000f198565b9150630000f1ec82630000f1a3565b600482019050919050565b6000630000f20682630000f1cc565b9150819050919050565b7f6361747300000000000000000000000000000000000000000000000000000000600082015250565b6000630000f24a600483630000f198565b9150630000f25982630000f210565b600482019050919050565b6000630000f27382630000f239565b9150819050919050565b7f6c6f6e6700000000000000000000000000000000000000000000000000000000600082015250565b6000630000f2b7600483630000f198565b9150630000f2c682630000f27d565b600482019050919050565b6000630000f2e082630000f2a6565b9150819050919050565b7f6d6d737300000000000000000000000000000000000000000000000000000000600082015250565b6000630000f324600483630000f198565b9150630000f33382630000f2ea565b600482019050919050565b6000630000f34d82630000f313565b9150819050919050565b7f6f72646900000000000000000000000000000000000000000000000000000000600082015250565b6000630000f391600483630000f198565b9150630000f3a082630000f357565b600482019050919050565b6000630000f3ba82630000f380565b9150819050919050565b7f7261747300000000000000000000000000000000000000000000000000000000600082015250565b6000630000f3fe600483630000f198565b9150630000f40d82630000f3c4565b600482019050919050565b6000630000f42782630000f3ed565b9150819050919050565b7f7361747300000000000000000000000000000000000000000000000000000000600082015250565b6000630000f46b600483630000f198565b9150630000f47a82630000f431565b600482019050919050565b6000630000f49482630000f45a565b9150819050919050565b7f6164610000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f4d8600383630000f198565b9150630000f4e782630000f49e565b600382019050919050565b6000630000f50182630000f4c7565b9150819050919050565b7f616d700000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f545600383630000f198565b9150630000f55482630000f50b565b600382019050919050565b6000630000f56e82630000f534565b9150819050919050565b7f61746f6d00000000000000000000000000000000000000000000000000000000600082015250565b6000630000f5b2600483630000f198565b9150630000f5c182630000f578565b600482019050919050565b6000630000f5db82630000f5a1565b9150819050919050565b7f6263680000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f61f600383630000f198565b9150630000f62e82630000f5e5565b600382019050919050565b6000630000f64882630000f60e565b9150819050919050565b7f6265616e00000000000000000000000000000000000000000000000000000000600082015250565b6000630000f68c600483630000f198565b9150630000f69b82630000f652565b600482019050919050565b6000630000f6b582630000f67b565b9150819050919050565b7f626e620000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f6f9600383630000f198565b9150630000f70882630000f6bf565b600382019050919050565b6000630000f72282630000f6e8565b9150819050919050565b7f636f6d7000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f766600483630000f198565b9150630000f77582630000f72c565b600482019050919050565b6000630000f78f82630000f755565b9150819050919050565b7f63726f0000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f7d3600383630000f198565b9150630000f7e282630000f799565b600382019050919050565b6000630000f7fc82630000f7c2565b9150819050919050565b7f6372760000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f840600383630000f198565b9150630000f84f82630000f806565b600382019050919050565b6000630000f86982630000f82f565b9150819050919050565b7f6376780000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f8ad600383630000f198565b9150630000f8bc82630000f873565b600382019050919050565b6000630000f8d682630000f89c565b9150819050919050565b7f6461690000000000000000000000000000000000000000000000000000000000600082015250565b6000630000f91a600383630000f198565b9150630000f92982630000f8e0565b600382019050919050565b6000630000f94382630000f909565b9150819050919050565b7f646f676500000000000000000000000000000000000000000000000000000000600082015250565b6000630000f987600483630000f198565b9150630000f99682630000f94d565b600482019050919050565b6000630000f9b082630000f976565b9150819050919050565b7f6479647800000000000000000000000000000000000000000000000000000000600082015250565b6000630000f9f4600483630000f198565b9150630000fa0382630000f9ba565b600482019050919050565b6000630000fa1d82630000f9e3565b9150819050919050565b7f6574630000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fa61600383630000f198565b9150630000fa7082630000fa27565b600382019050919050565b6000630000fa8a82630000fa50565b9150819050919050565b7f6574680000000000000000000000000000000000000000000000000000000000600082015250565b6000630000face600383630000f198565b9150630000fadd82630000fa94565b600382019050919050565b6000630000faf782630000fabd565b9150819050919050565b7f66696c0000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fb3b600383630000f198565b9150630000fb4a82630000fb01565b600382019050919050565b6000630000fb6482630000fb2a565b9150819050919050565b7f6772740000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fba8600383630000f198565b9150630000fbb782630000fb6e565b600382019050919050565b6000630000fbd182630000fb97565b9150819050919050565b7f6774630000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fc15600383630000f198565b9150630000fc2482630000fbdb565b600382019050919050565b6000630000fc3e82630000fc04565b9150819050919050565b7f6775736400000000000000000000000000000000000000000000000000000000600082015250565b6000630000fc82600483630000f198565b9150630000fc9182630000fc48565b600482019050919050565b6000630000fcab82630000fc71565b9150819050919050565b7f696d780000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fcef600383630000f198565b9150630000fcfe82630000fcb5565b600382019050919050565b6000630000fd1882630000fcde565b9150819050919050565b7f696e6a0000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fd5c600383630000f198565b9150630000fd6b82630000fd22565b600382019050919050565b6000630000fd8582630000fd4b565b9150819050919050565b7f6c656f0000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fdc9600383630000f198565b9150630000fdd882630000fd8f565b600382019050919050565b6000630000fdf282630000fdb8565b9150819050919050565b7f6c696e6b00000000000000000000000000000000000000000000000000000000600082015250565b6000630000fe36600483630000f198565b9150630000fe4582630000fdfc565b600482019050919050565b6000630000fe5f82630000fe25565b9150819050919050565b7f6c69740000000000000000000000000000000000000000000000000000000000600082015250565b6000630000fea3600383630000f198565b9150630000feb282630000fe69565b600382019050919050565b6000630000fecc82630000fe92565b9150819050919050565b7f6d61746963000000000000000000000000000000000000000000000000000000600082015250565b6000630000ff10600583630000f198565b9150630000ff1f82630000fed6565b600582019050919050565b6000630000ff3982630000feff565b9150819050919050565b7f6d63727400000000000000000000000000000000000000000000000000000000600082015250565b6000630000ff7d600483630000f198565b9150630000ff8c82630000ff43565b600482019050919050565b6000630000ffa682630000ff6c565b9150819050919050565b7f6e66700000000000000000000000000000000000000000000000000000000000600082015250565b6000630000ffea600383630000f198565b9150630000fff982630000ffb0565b600382019050919050565b6000630001001382630000ffd9565b9150819050919050565b7f70656f706c650000000000000000000000000000000000000000000000000000600082015250565b60006300010057600683630000f198565b9150630001006682630001001d565b600682019050919050565b60006300010080826300010046565b9150819050919050565b7f7368696200000000000000000000000000000000000000000000000000000000600082015250565b600063000100c4600483630000f198565b915063000100d382630001008a565b600482019050919050565b600063000100ed8263000100b3565b9150819050919050565b7f736f6c0000000000000000000000000000000000000000000000000000000000600082015250565b60006300010131600383630000f198565b915063000101408263000100f7565b600382019050919050565b6000630001015a826300010120565b9150819050919050565b7f7370616365696400000000000000000000000000000000000000000000000000600082015250565b6000630001019e600783630000f198565b915063000101ad826300010164565b600782019050919050565b600063000101c782630001018d565b9150819050919050565b7f746f6e0000000000000000000000000000000000000000000000000000000000600082015250565b6000630001020b600383630000f198565b9150630001021a8263000101d1565b600382019050919050565b600063000102348263000101fa565b9150819050919050565b7f7472780000000000000000000000000000000000000000000000000000000000600082015250565b60006300010278600383630000f198565b9150630001028782630001023e565b600382019050919050565b600063000102a1826300010267565b9150819050919050565b7f7475736400000000000000000000000000000000000000000000000000000000600082015250565b600063000102e5600483630000f198565b915063000102f48263000102ab565b600482019050919050565b6000630001030e8263000102d4565b9150819050919050565b7f756e690000000000000000000000000000000000000000000000000000000000600082015250565b60006300010352600383630000f198565b91506300010361826300010318565b600382019050919050565b6000630001037b826300010341565b9150819050919050565b7f7573646300000000000000000000000000000000000000000000000000000000600082015250565b600063000103bf600483630000f198565b915063000103ce826300010385565b600482019050919050565b600063000103e88263000103ae565b9150819050919050565b7f7573646400000000000000000000000000000000000000000000000000000000600082015250565b6000630001042c600483630000f198565b9150630001043b8263000103f2565b600482019050919050565b6000630001045582630001041b565b9150819050919050565b7f7573647400000000000000000000000000000000000000000000000000000000600082015250565b60006300010499600483630000f198565b915063000104a882630001045f565b600482019050919050565b600063000104c2826300010488565b9150819050919050565b7f7762746300000000000000000000000000000000000000000000000000000000600082015250565b60006300010506600483630000f198565b915063000105158263000104cc565b600482019050919050565b6000630001052f8263000104f5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063000105b0826300010568565b915063000105bf836300010568565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161563000105fe5763000105fd6300010572565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680630001068157607f821691505b60208210811415630001069b57630001069a6300010638565b5b50919050565b61c9f48063000106b26000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b4e4c68514610030575b600080fd5b61004a6004803603810190610045919061addd565b610064565b60405161005b95949392919061b033565b60405180910390f35b60608060608060008060405180606001604052806030815260200161c91160309139905060006040518060400160405280601481526020017f546f6b656e20486f6c64696e6720416d6f756e7400000000000000000000000081525090506040518060a00160405280606d815260200161c55c606d9139600090805190602001906100f092919061a76a565b50600088806020019051810190610107919061b112565b90506040516020016101189061b18c565b6040516020818303038152906040528051906020012060018260405161013e919061b1d2565b908152602001604051809103902060405160200161015c919061b2de565b6040516020818303038152906040528051906020012014156101b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101aa9061b341565b60405180910390fd5b60006102668c8c6001856040516101ca919061b1d2565b908152602001604051809103902080546101e39061b218565b80601f016020809104026020016040519081016040528092919081815260200182805461020f9061b218565b801561025c5780601f106102315761010080835404028352916020019161025c565b820191906000526020600020905b81548152906001019060200180831161023f57829003601f168201915b50505050506191bd565b905060008060006102e384600287604051610281919061b1d2565b90815260200160405180910390208054806020026020016040519081016040528092919081815260200182805480156102d957602002820191906000526020600020905b8154815260200190600101908083116102c5575b5050505050619297565b925092509250600061039c8383600189604051610300919061b1d2565b908152602001604051809103902080546103199061b218565b80601f01602080910402602001604051908101604052809291908181526020018280546103459061b218565b80156103925780601f1061036757610100808354040283529160200191610392565b820191906000526020600020905b81548152906001019060200180831161037557829003601f168201915b50505050506193fb565b90506000808511806103ae5750600086115b90508888836000848180546103c29061b218565b80601f01602080910402602001604051908101604052809291908181526020018280546103ee9061b218565b801561043b5780601f106104105761010080835404028352916020019161043b565b820191906000526020600020905b81548152906001019060200180831161041e57829003601f168201915b505050505091509d509d509d509d509d50505050505050505050939792965093509350565b60606040518060400160405280600481526020017f6274637300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156104bc576104bb61a8a0565b5b6040519080825280602002602001820160405280156104ea5781602001602082028036833780820191505090505b5090506103e860006104fc919061b39a565b816000815181106105105761050f61b3f4565b5b6020026020010181815250506103e8600161052b919061b39a565b8160018151811061053f5761053e61b3f4565b5b6020026020010181815250506103e8600561055a919061b39a565b8160028151811061056e5761056d61b3f4565b5b6020026020010181815250506103e86014610589919061b39a565b8160038151811061059d5761059c61b3f4565b5b6020026020010181815250506103e860326105b8919061b39a565b816004815181106105cc576105cb61b3f4565b5b6020026020010181815250506103e860646105e7919061b39a565b816005815181106105fb576105fa61b3f4565b5b6020026020010181815250506103e860c8610616919061b39a565b8160068151811061062a5761062961b3f4565b5b6020026020010181815250506103e86101f4610646919061b39a565b8160078151811061065a5761065961b3f4565b5b6020026020010181815250506103e8610320610676919061b39a565b8160088151811061068a5761068961b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff8111156106bc576106bb61a8a0565b5b6040519080825280602002602001820160405280156106ea5781602001602082028036833780820191505090505b5090506009816000815181106107035761070261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6361747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff8111156107805761077f61a8a0565b5b6040519080825280602002602001820160405280156107ae5781602001602082028036833780820191505090505b5090506103e860006107c0919061b39a565b816000815181106107d4576107d361b3f4565b5b6020026020010181815250506103e860016107ef919061b39a565b816001815181106108035761080261b3f4565b5b6020026020010181815250506103e861271061081f919061b39a565b816002815181106108335761083261b3f4565b5b6020026020010181815250506103e861c35061084f919061b39a565b816003815181106108635761086261b3f4565b5b6020026020010181815250506103e8620186a0610880919061b39a565b816004815181106108945761089361b3f4565b5b6020026020010181815250506103e862030d406108b1919061b39a565b816005815181106108c5576108c461b3f4565b5b6020026020010181815250506103e86207a1206108e2919061b39a565b816006815181106108f6576108f561b3f4565b5b6020026020010181815250506103e8620c3500610913919061b39a565b816007815181106109275761092661b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff8111156109595761095861a8a0565b5b6040519080825280602002602001820160405280156109875781602001602082028036833780820191505090505b5090506009816000815181106109a05761099f61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6c6f6e6700000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff811115610a1d57610a1c61a8a0565b5b604051908082528060200260200182016040528015610a4b5781602001602082028036833780820191505090505b5090506103e86000610a5d919061b39a565b81600081518110610a7157610a7061b3f4565b5b6020026020010181815250506103e86001610a8c919061b39a565b81600181518110610aa057610a9f61b3f4565b5b6020026020010181815250506103e86014610abb919061b39a565b81600281518110610acf57610ace61b3f4565b5b6020026020010181815250506103e86032610aea919061b39a565b81600381518110610afe57610afd61b3f4565b5b6020026020010181815250506103e860c8610b19919061b39a565b81600481518110610b2d57610b2c61b3f4565b5b6020026020010181815250506103e86101f4610b49919061b39a565b81600581518110610b5d57610b5c61b3f4565b5b6020026020010181815250506103e880610b77919061b39a565b81600681518110610b8b57610b8a61b3f4565b5b6020026020010181815250506103e86107d0610ba7919061b39a565b81600781518110610bbb57610bba61b3f4565b5b6020026020010181815250506103e8610bb8610bd7919061b39a565b81600881518110610beb57610bea61b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff811115610c1d57610c1c61a8a0565b5b604051908082528060200260200182016040528015610c4b5781602001602082028036833780820191505090505b509050600981600081518110610c6457610c6361b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6d6d737300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff811115610ce157610ce061a8a0565b5b604051908082528060200260200182016040528015610d0f5781602001602082028036833780820191505090505b5090506103e86000610d21919061b39a565b81600081518110610d3557610d3461b3f4565b5b6020026020010181815250506103e86001610d50919061b39a565b81600181518110610d6457610d6361b3f4565b5b6020026020010181815250506103e86014610d7f919061b39a565b81600281518110610d9357610d9261b3f4565b5b6020026020010181815250506103e86032610dae919061b39a565b81600381518110610dc257610dc161b3f4565b5b6020026020010181815250506103e86064610ddd919061b39a565b81600481518110610df157610df061b3f4565b5b6020026020010181815250506103e860c8610e0c919061b39a565b81600581518110610e2057610e1f61b3f4565b5b6020026020010181815250506103e86101f4610e3c919061b39a565b81600681518110610e5057610e4f61b3f4565b5b6020026020010181815250506103e880610e6a919061b39a565b81600781518110610e7e57610e7d61b3f4565b5b6020026020010181815250506103e86107d0610e9a919061b39a565b81600881518110610eae57610ead61b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff811115610ee057610edf61a8a0565b5b604051908082528060200260200182016040528015610f0e5781602001602082028036833780820191505090505b509050600981600081518110610f2757610f2661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f6f72646900000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff811115610fa457610fa361a8a0565b5b604051908082528060200260200182016040528015610fd25781602001602082028036833780820191505090505b5090506103e86000610fe4919061b39a565b81600081518110610ff857610ff761b3f4565b5b6020026020010181815250506103e86001611013919061b39a565b816001815181106110275761102661b3f4565b5b6020026020010181815250506103e86005611042919061b39a565b816002815181106110565761105561b3f4565b5b6020026020010181815250506103e86014611071919061b39a565b816003815181106110855761108461b3f4565b5b6020026020010181815250506103e860326110a0919061b39a565b816004815181106110b4576110b361b3f4565b5b6020026020010181815250506103e860646110cf919061b39a565b816005815181106110e3576110e261b3f4565b5b6020026020010181815250506103e860c86110fe919061b39a565b816006815181106111125761111161b3f4565b5b6020026020010181815250506103e86101f461112e919061b39a565b816007815181106111425761114161b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff8111156111745761117361a8a0565b5b6040519080825280602002602001820160405280156111a25781602001602082028036833780820191505090505b5090506009816000815181106111bb576111ba61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f7261747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156112385761123761a8a0565b5b6040519080825280602002602001820160405280156112665781602001602082028036833780820191505090505b5090506103e86000611278919061b39a565b8160008151811061128c5761128b61b3f4565b5b6020026020010181815250506103e860016112a7919061b39a565b816001815181106112bb576112ba61b3f4565b5b6020026020010181815250506103e8619c406112d7919061b39a565b816002815181106112eb576112ea61b3f4565b5b6020026020010181815250506103e862030d40611308919061b39a565b8160038151811061131c5761131b61b3f4565b5b6020026020010181815250506103e8620f4240611339919061b39a565b8160048151811061134d5761134c61b3f4565b5b6020026020010181815250506103e8621e848061136a919061b39a565b8160058151811061137e5761137d61b3f4565b5b6020026020010181815250506103e8623d090061139b919061b39a565b816006815181106113af576113ae61b3f4565b5b6020026020010181815250506103e8629896806113cc919061b39a565b816007815181106113e0576113df61b3f4565b5b6020026020010181815250506103e8621e84806113fd919061b39a565b816008815181106114115761141061b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff8111156114435761144261a8a0565b5b6040519080825280602002602001820160405280156114715781602001602082028036833780820191505090505b50905060098160008151811061148a5761148961b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600481526020017f7361747300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156115075761150661a8a0565b5b6040519080825280602002602001820160405280156115355781602001602082028036833780820191505090505b5090506103e86000611547919061b39a565b8160008151811061155b5761155a61b3f4565b5b6020026020010181815250506103e86001611576919061b39a565b8160018151811061158a5761158961b3f4565b5b6020026020010181815250506103e86302625a006115a8919061b39a565b816002815181106115bc576115bb61b3f4565b5b6020026020010181815250506103e8630bebc2006115da919061b39a565b816003815181106115ee576115ed61b3f4565b5b6020026020010181815250506103e8631dcd650061160c919061b39a565b816004815181106116205761161f61b3f4565b5b6020026020010181815250506103e8633b9aca0061163e919061b39a565b816005815181106116525761165161b3f4565b5b6020026020010181815250506103e86377359400611670919061b39a565b816006815181106116845761168361b3f4565b5b6020026020010181815250506103e863ee6b28006116a2919061b39a565b816007815181106116b6576116b561b3f4565b5b6020026020010181815250506103e8640165a0bc006116d5919061b39a565b816008815181106116e9576116e861b3f4565b5b6020026020010181815250508091505090565b60606000600167ffffffffffffffff81111561171b5761171a61a8a0565b5b6040519080825280602002602001820160405280156117495781602001602082028036833780820191505090505b5090506009816000815181106117625761176161b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600381526020017f6164610000000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff8111156117df576117de61a8a0565b5b60405190808252806020026020018201604052801561180d5781602001602082028036833780820191505090505b5090506103e8600061181f919061b39a565b816000815181106118335761183261b3f4565b5b6020026020010181815250506103e88061184d919061b39a565b816001815181106118615761186061b3f4565b5b6020026020010181815250506103e861138861187d919061b39a565b816002815181106118915761189061b3f4565b5b6020026020010181815250506103e8614e206118ad919061b39a565b816003815181106118c1576118c061b3f4565b5b6020026020010181815250506103e861c3506118dd919061b39a565b816004815181106118f1576118f061b3f4565b5b6020026020010181815250506103e8620186a061190e919061b39a565b816005815181106119225761192161b3f4565b5b6020026020010181815250506103e8620493e061193f919061b39a565b816006815181106119535761195261b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156119855761198461a8a0565b5b6040519080825280602002602001820160405280156119b35781602001602082028036833780820191505090505b5090506007816000815181106119cc576119cb61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106119fc576119fb61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c23e602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f616d700000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115611ab057611aaf61a8a0565b5b604051908082528060200260200182016040528015611ade5781602001602082028036833780820191505090505b5090506103e86000611af0919061b39a565b81600081518110611b0457611b0361b3f4565b5b6020026020010181815250506103e86001611b1f919061b39a565b81600181518110611b3357611b3261b3f4565b5b6020026020010181815250506103e86032611b4e919061b39a565b81600281518110611b6257611b6161b3f4565b5b6020026020010181815250506103e86064611b7d919061b39a565b81600381518110611b9157611b9061b3f4565b5b6020026020010181815250506103e860c8611bac919061b39a565b81600481518110611bc057611bbf61b3f4565b5b6020026020010181815250506103e86101f4611bdc919061b39a565b81600581518110611bf057611bef61b3f4565b5b6020026020010181815250506103e8610320611c0c919061b39a565b81600681518110611c2057611c1f61b3f4565b5b6020026020010181815250506103e86104b0611c3c919061b39a565b81600781518110611c5057611c4f61b3f4565b5b6020026020010181815250506103e8610640611c6c919061b39a565b81600881518110611c8057611c7f61b3f4565b5b6020026020010181815250506103e8610bb8611c9c919061b39a565b81600981518110611cb057611caf61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115611ce257611ce161a8a0565b5b604051908082528060200260200182016040528015611d105781602001602082028036833780820191505090505b509050600781600081518110611d2957611d2861b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110611d5957611d5861b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c7eb602a9139905090565b60606040518060400160405280600481526020017f61746f6d00000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff811115611e0d57611e0c61a8a0565b5b604051908082528060200260200182016040528015611e3b5781602001602082028036833780820191505090505b5090506103e86000611e4d919061b39a565b81600081518110611e6157611e6061b3f4565b5b6020026020010181815250506103e86001611e7c919061b39a565b81600181518110611e9057611e8f61b3f4565b5b6020026020010181815250506103e86005611eab919061b39a565b81600281518110611ebf57611ebe61b3f4565b5b6020026020010181815250506103e86014611eda919061b39a565b81600381518110611eee57611eed61b3f4565b5b6020026020010181815250506103e86032611f09919061b39a565b81600481518110611f1d57611f1c61b3f4565b5b6020026020010181815250506103e86050611f38919061b39a565b81600581518110611f4c57611f4b61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115611f7e57611f7d61a8a0565b5b604051908082528060200260200182016040528015611fac5781602001602082028036833780820191505090505b509050600781600081518110611fc557611fc461b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110611ff557611ff461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c2e6602a9139905090565b60606040518060600160405280602a815260200161c508602a9139905090565b60606040518060400160405280600381526020017f6263680000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff8111156120b2576120b161a8a0565b5b6040519080825280602002602001820160405280156120e05781602001602082028036833780820191505090505b5090506000816000815181106120f9576120f861b3f4565b5b60200260200101818152505060648160018151811061211b5761211a61b3f4565b5b6020026020010181815250506101f48160028151811061213e5761213d61b3f4565b5b6020026020010181815250506107d0816003815181106121615761216061b3f4565b5b602002602001018181525050611770816004815181106121845761218361b3f4565b5b602002602001018181525050612ee0816005815181106121a7576121a661b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156121d9576121d861a8a0565b5b6040519080825280602002602001820160405280156122075781602001602082028036833780820191505090505b5090506007816000815181106122205761221f61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106122505761224f61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c4de602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600481526020017f6265616e00000000000000000000000000000000000000000000000000000000815250905090565b60606000600567ffffffffffffffff8111156123045761230361a8a0565b5b6040519080825280602002602001820160405280156123325781602001602082028036833780820191505090505b5090506103e86000612344919061b39a565b816000815181106123585761235761b3f4565b5b6020026020010181815250506103e86105dc612374919061b39a565b816001815181106123885761238761b3f4565b5b6020026020010181815250506103e86113886123a4919061b39a565b816002815181106123b8576123b761b3f4565b5b6020026020010181815250506103e86127106123d4919061b39a565b816003815181106123e8576123e761b3f4565b5b6020026020010181815250506103e861c350612404919061b39a565b816004815181106124185761241761b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111561244a5761244961a8a0565b5b6040519080825280602002602001820160405280156124785781602001602082028036833780820191505090505b5090506007816000815181106124915761249061b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106124c1576124c061b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c76d602a9139905090565b60606040518060600160405280602a815260200161c941602a9139905090565b60606040518060400160405280600381526020017f626e620000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111561257e5761257d61a8a0565b5b6040519080825280602002602001820160405280156125ac5781602001602082028036833780820191505090505b5090506103e860006125be919061b39a565b816000815181106125d2576125d161b3f4565b5b6020026020010181815250506103e860016125ed919061b39a565b816001815181106126015761260061b3f4565b5b6020026020010181815250506103e8603261261c919061b39a565b816002815181106126305761262f61b3f4565b5b6020026020010181815250506103e8606461264b919061b39a565b8160038151811061265f5761265e61b3f4565b5b6020026020010181815250506103e860c861267a919061b39a565b8160048151811061268e5761268d61b3f4565b5b6020026020010181815250506103e86101f46126aa919061b39a565b816005815181106126be576126bd61b3f4565b5b6020026020010181815250506103e86103206126da919061b39a565b816006815181106126ee576126ed61b3f4565b5b6020026020010181815250506103e86104b061270a919061b39a565b8160078151811061271e5761271d61b3f4565b5b6020026020010181815250506103e861064061273a919061b39a565b8160088151811061274e5761274d61b3f4565b5b6020026020010181815250506103e8610bb861276a919061b39a565b8160098151811061277e5761277d61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156127b0576127af61a8a0565b5b6040519080825280602002602001820160405280156127de5781602001602082028036833780820191505090505b5090506007816000815181106127f7576127f661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106128275761282661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060400160405280600c81526020017f4e617469766520546f6b656e0000000000000000000000000000000000000000815250905090565b60606040518060600160405280602a815260200161c671602a9139905090565b60606040518060400160405280600481526020017f636f6d7000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156129015761290061a8a0565b5b60405190808252806020026020018201604052801561292f5781602001602082028036833780820191505090505b5090506103e86000612941919061b39a565b816000815181106129555761295461b3f4565b5b6020026020010181815250506103e86001612970919061b39a565b816001815181106129845761298361b3f4565b5b6020026020010181815250506103e8603261299f919061b39a565b816002815181106129b3576129b261b3f4565b5b6020026020010181815250506103e860646129ce919061b39a565b816003815181106129e2576129e161b3f4565b5b6020026020010181815250506103e860c86129fd919061b39a565b81600481518110612a1157612a1061b3f4565b5b6020026020010181815250506103e86101f4612a2d919061b39a565b81600581518110612a4157612a4061b3f4565b5b6020026020010181815250506103e8610320612a5d919061b39a565b81600681518110612a7157612a7061b3f4565b5b6020026020010181815250506103e86104b0612a8d919061b39a565b81600781518110612aa157612aa061b3f4565b5b6020026020010181815250506103e8610640612abd919061b39a565b81600881518110612ad157612ad061b3f4565b5b6020026020010181815250506103e8610bb8612aed919061b39a565b81600981518110612b0157612b0061b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115612b3357612b3261a8a0565b5b604051908082528060200260200182016040528015612b615781602001602082028036833780820191505090505b509050600781600081518110612b7a57612b7961b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110612baa57612ba961b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c6ef602a9139905090565b60606040518060400160405280600381526020017f63726f0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff811115612c5e57612c5d61a8a0565b5b604051908082528060200260200182016040528015612c8c5781602001602082028036833780820191505090505b5090506103e86000612c9e919061b39a565b81600081518110612cb257612cb161b3f4565b5b6020026020010181815250506103e880612ccc919061b39a565b81600181518110612ce057612cdf61b3f4565b5b6020026020010181815250506103e8611388612cfc919061b39a565b81600281518110612d1057612d0f61b3f4565b5b6020026020010181815250506103e8614e20612d2c919061b39a565b81600381518110612d4057612d3f61b3f4565b5b6020026020010181815250506103e861c350612d5c919061b39a565b81600481518110612d7057612d6f61b3f4565b5b6020026020010181815250506103e8620186a0612d8d919061b39a565b81600581518110612da157612da061b3f4565b5b6020026020010181815250506103e8620493e0612dbe919061b39a565b81600681518110612dd257612dd161b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115612e0457612e0361a8a0565b5b604051908082528060200260200182016040528015612e325781602001602082028036833780820191505090505b509050600781600081518110612e4b57612e4a61b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110612e7b57612e7a61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c6c5602a9139905090565b60606040518060400160405280600381526020017f6372760000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115612f2f57612f2e61a8a0565b5b604051908082528060200260200182016040528015612f5d5781602001602082028036833780820191505090505b5090506103e86000612f6f919061b39a565b81600081518110612f8357612f8261b3f4565b5b6020026020010181815250506103e86001612f9e919061b39a565b81600181518110612fb257612fb161b3f4565b5b6020026020010181815250506103e86032612fcd919061b39a565b81600281518110612fe157612fe061b3f4565b5b6020026020010181815250506103e86064612ffc919061b39a565b816003815181106130105761300f61b3f4565b5b6020026020010181815250506103e860c861302b919061b39a565b8160048151811061303f5761303e61b3f4565b5b6020026020010181815250506103e86101f461305b919061b39a565b8160058151811061306f5761306e61b3f4565b5b6020026020010181815250506103e861032061308b919061b39a565b8160068151811061309f5761309e61b3f4565b5b6020026020010181815250506103e86104b06130bb919061b39a565b816007815181106130cf576130ce61b3f4565b5b6020026020010181815250506103e86106406130eb919061b39a565b816008815181106130ff576130fe61b3f4565b5b6020026020010181815250506103e8610bb861311b919061b39a565b8160098151811061312f5761312e61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156131615761316061a8a0565b5b60405190808252806020026020018201604052801561318f5781602001602082028036833780820191505090505b5090506007816000815181106131a8576131a761b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106131d8576131d761b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c69b602a9139905090565b60606040518060400160405280600381526020017f6376780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111561328c5761328b61a8a0565b5b6040519080825280602002602001820160405280156132ba5781602001602082028036833780820191505090505b5090506103e860006132cc919061b39a565b816000815181106132e0576132df61b3f4565b5b6020026020010181815250506103e860016132fb919061b39a565b8160018151811061330f5761330e61b3f4565b5b6020026020010181815250506103e8603261332a919061b39a565b8160028151811061333e5761333d61b3f4565b5b6020026020010181815250506103e86064613359919061b39a565b8160038151811061336d5761336c61b3f4565b5b6020026020010181815250506103e860c8613388919061b39a565b8160048151811061339c5761339b61b3f4565b5b6020026020010181815250506103e86101f46133b8919061b39a565b816005815181106133cc576133cb61b3f4565b5b6020026020010181815250506103e86103206133e8919061b39a565b816006815181106133fc576133fb61b3f4565b5b6020026020010181815250506103e86104b0613418919061b39a565b8160078151811061342c5761342b61b3f4565b5b6020026020010181815250506103e8610640613448919061b39a565b8160088151811061345c5761345b61b3f4565b5b6020026020010181815250506103e8610bb8613478919061b39a565b8160098151811061348c5761348b61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156134be576134bd61a8a0565b5b6040519080825280602002602001820160405280156134ec5781602001602082028036833780820191505090505b5090506007816000815181106135055761350461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106135355761353461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c3e2602a9139905090565b60606040518060400160405280600381526020017f6461690000000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156135e9576135e861a8a0565b5b6040519080825280602002602001820160405280156136175781602001602082028036833780820191505090505b5090506103e86000613629919061b39a565b8160008151811061363d5761363c61b3f4565b5b6020026020010181815250506103e8600a613658919061b39a565b8160018151811061366c5761366b61b3f4565b5b6020026020010181815250506103e8601e613687919061b39a565b8160028151811061369b5761369a61b3f4565b5b6020026020010181815250506103e860506136b6919061b39a565b816003815181106136ca576136c961b3f4565b5b6020026020010181815250506103e860c86136e5919061b39a565b816004815181106136f9576136f861b3f4565b5b6020026020010181815250506103e86101f4613715919061b39a565b816005815181106137295761372861b3f4565b5b6020026020010181815250506103e880613743919061b39a565b816006815181106137575761375661b3f4565b5b6020026020010181815250506103e86107d0613773919061b39a565b816007815181106137875761378661b3f4565b5b6020026020010181815250506103e86113886137a3919061b39a565b816008815181106137b7576137b661b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156137e9576137e861a8a0565b5b6040519080825280602002602001820160405280156138175781602001602082028036833780820191505090505b5090506007816000815181106138305761382f61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106138605761385f61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c0c4602a9139905090565b60606040518060600160405280602a815260200161c16c602a9139905090565b60606040518060400160405280600481526020017f646f676500000000000000000000000000000000000000000000000000000000815250905090565b60606000600767ffffffffffffffff81111561391d5761391c61a8a0565b5b60405190808252806020026020018201604052801561394b5781602001602082028036833780820191505090505b5090506103e8600061395d919061b39a565b816000815181106139715761397061b3f4565b5b6020026020010181815250506103e88061398b919061b39a565b8160018151811061399f5761399e61b3f4565b5b6020026020010181815250506103e86113886139bb919061b39a565b816002815181106139cf576139ce61b3f4565b5b6020026020010181815250506103e8614e206139eb919061b39a565b816003815181106139ff576139fe61b3f4565b5b6020026020010181815250506103e861c350613a1b919061b39a565b81600481518110613a2f57613a2e61b3f4565b5b6020026020010181815250506103e8620186a0613a4c919061b39a565b81600581518110613a6057613a5f61b3f4565b5b6020026020010181815250506103e8620493e0613a7d919061b39a565b81600681518110613a9157613a9061b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115613ac357613ac261a8a0565b5b604051908082528060200260200182016040528015613af15781602001602082028036833780820191505090505b509050600781600081518110613b0a57613b0961b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110613b3a57613b3961b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c995602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600481526020017f6479647800000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115613bee57613bed61a8a0565b5b604051908082528060200260200182016040528015613c1c5781602001602082028036833780820191505090505b5090506103e86000613c2e919061b39a565b81600081518110613c4257613c4161b3f4565b5b6020026020010181815250506103e86001613c5d919061b39a565b81600181518110613c7157613c7061b3f4565b5b6020026020010181815250506103e86032613c8c919061b39a565b81600281518110613ca057613c9f61b3f4565b5b6020026020010181815250506103e86064613cbb919061b39a565b81600381518110613ccf57613cce61b3f4565b5b6020026020010181815250506103e860c8613cea919061b39a565b81600481518110613cfe57613cfd61b3f4565b5b6020026020010181815250506103e86101f4613d1a919061b39a565b81600581518110613d2e57613d2d61b3f4565b5b6020026020010181815250506103e8610320613d4a919061b39a565b81600681518110613d5e57613d5d61b3f4565b5b6020026020010181815250506103e86104b0613d7a919061b39a565b81600781518110613d8e57613d8d61b3f4565b5b6020026020010181815250506103e8610640613daa919061b39a565b81600881518110613dbe57613dbd61b3f4565b5b6020026020010181815250506103e8610bb8613dda919061b39a565b81600981518110613dee57613ded61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115613e2057613e1f61a8a0565b5b604051908082528060200260200182016040528015613e4e5781602001602082028036833780820191505090505b509050600781600081518110613e6757613e6661b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110613e9757613e9661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c0ee602a9139905090565b60606040518060400160405280600381526020017f6574630000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff811115613f4b57613f4a61a8a0565b5b604051908082528060200260200182016040528015613f795781602001602082028036833780820191505090505b5090506103e86000613f8b919061b39a565b81600081518110613f9f57613f9e61b3f4565b5b6020026020010181815250506103e86001613fba919061b39a565b81600181518110613fce57613fcd61b3f4565b5b6020026020010181815250506103e86005613fe9919061b39a565b81600281518110613ffd57613ffc61b3f4565b5b6020026020010181815250506103e86014614018919061b39a565b8160038151811061402c5761402b61b3f4565b5b6020026020010181815250506103e86032614047919061b39a565b8160048151811061405b5761405a61b3f4565b5b6020026020010181815250506103e86050614076919061b39a565b8160058151811061408a5761408961b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156140bc576140bb61a8a0565b5b6040519080825280602002602001820160405280156140ea5781602001602082028036833780820191505090505b5090506007816000815181106141035761410261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106141335761413261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c460602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f6574680000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156141e7576141e661a8a0565b5b6040519080825280602002602001820160405280156142155781602001602082028036833780820191505090505b50905060008160008151811061422e5761422d61b3f4565b5b602002602001018181525050600a816001815181106142505761424f61b3f4565b5b6020026020010181815250506032816002815181106142725761427161b3f4565b5b60200260200101818152505060c8816003815181106142945761429361b3f4565b5b602002602001018181525050610258816004815181106142b7576142b661b3f4565b5b6020026020010181815250506104b0816005815181106142da576142d961b3f4565b5b602002602001018181525050610bb8816006815181106142fd576142fc61b3f4565b5b602002602001018181525050611f40816007815181106143205761431f61b3f4565b5b602002602001018181525050614e20816008815181106143435761434261b3f4565b5b60200260200101818152505061c350816009815181106143665761436561b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156143985761439761a8a0565b5b6040519080825280602002602001820160405280156143c65781602001602082028036833780820191505090505b5090506007816000815181106143df576143de61b3f4565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811061440f5761440e61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c7c1602a9139905090565b60606040518060400160405280600c81526020017f4e617469766520546f6b656e0000000000000000000000000000000000000000815250905090565b60606040518060400160405280600381526020017f66696c0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff8111156144e9576144e861a8a0565b5b6040519080825280602002602001820160405280156145175781602001602082028036833780820191505090505b5090506103e86000614529919061b39a565b8160008151811061453d5761453c61b3f4565b5b6020026020010181815250506103e8600a614558919061b39a565b8160018151811061456c5761456b61b3f4565b5b6020026020010181815250506103e8601e614587919061b39a565b8160028151811061459b5761459a61b3f4565b5b6020026020010181815250506103e860506145b6919061b39a565b816003815181106145ca576145c961b3f4565b5b6020026020010181815250506103e860c86145e5919061b39a565b816004815181106145f9576145f861b3f4565b5b6020026020010181815250506103e86101f4614615919061b39a565b816005815181106146295761462861b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111561465b5761465a61a8a0565b5b6040519080825280602002602001820160405280156146895781602001602082028036833780820191505090505b5090506007816000815181106146a2576146a161b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106146d2576146d161b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c310602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600381526020017f6772740000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156147865761478561a8a0565b5b6040519080825280602002602001820160405280156147b45781602001602082028036833780820191505090505b5090506103e860006147c6919061b39a565b816000815181106147da576147d961b3f4565b5b6020026020010181815250506103e860016147f5919061b39a565b816001815181106148095761480861b3f4565b5b6020026020010181815250506103e86032614824919061b39a565b816002815181106148385761483761b3f4565b5b6020026020010181815250506103e86064614853919061b39a565b816003815181106148675761486661b3f4565b5b6020026020010181815250506103e860c8614882919061b39a565b816004815181106148965761489561b3f4565b5b6020026020010181815250506103e86101f46148b2919061b39a565b816005815181106148c6576148c561b3f4565b5b6020026020010181815250506103e86103206148e2919061b39a565b816006815181106148f6576148f561b3f4565b5b6020026020010181815250506103e86104b0614912919061b39a565b816007815181106149265761492561b3f4565b5b6020026020010181815250506103e8610640614942919061b39a565b816008815181106149565761495561b3f4565b5b6020026020010181815250506103e8610bb8614972919061b39a565b816009815181106149865761498561b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156149b8576149b761a8a0565b5b6040519080825280602002602001820160405280156149e65781602001602082028036833780820191505090505b5090506007816000815181106149ff576149fe61b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110614a2f57614a2e61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c5c9602a9139905090565b60606040518060600160405280602a815260200161c893602a9139905090565b60606040518060400160405280600381526020017f6774630000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115614aec57614aeb61a8a0565b5b604051908082528060200260200182016040528015614b1a5781602001602082028036833780820191505090505b5090506103e86000614b2c919061b39a565b81600081518110614b4057614b3f61b3f4565b5b6020026020010181815250506103e86001614b5b919061b39a565b81600181518110614b6f57614b6e61b3f4565b5b6020026020010181815250506103e86032614b8a919061b39a565b81600281518110614b9e57614b9d61b3f4565b5b6020026020010181815250506103e86064614bb9919061b39a565b81600381518110614bcd57614bcc61b3f4565b5b6020026020010181815250506103e860c8614be8919061b39a565b81600481518110614bfc57614bfb61b3f4565b5b6020026020010181815250506103e86101f4614c18919061b39a565b81600581518110614c2c57614c2b61b3f4565b5b6020026020010181815250506103e8610320614c48919061b39a565b81600681518110614c5c57614c5b61b3f4565b5b6020026020010181815250506103e86104b0614c78919061b39a565b81600781518110614c8c57614c8b61b3f4565b5b6020026020010181815250506103e8610640614ca8919061b39a565b81600881518110614cbc57614cbb61b3f4565b5b6020026020010181815250506103e8610bb8614cd8919061b39a565b81600981518110614cec57614ceb61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115614d1e57614d1d61a8a0565b5b604051908082528060200260200182016040528015614d4c5781602001602082028036833780820191505090505b509050600781600081518110614d6557614d6461b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110614d9557614d9461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c268602a9139905090565b60606040518060400160405280600481526020017f6775736400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115614e4957614e4861a8a0565b5b604051908082528060200260200182016040528015614e775781602001602082028036833780820191505090505b5090506103e86000614e89919061b39a565b81600081518110614e9d57614e9c61b3f4565b5b6020026020010181815250506103e86001614eb8919061b39a565b81600181518110614ecc57614ecb61b3f4565b5b6020026020010181815250506103e86032614ee7919061b39a565b81600281518110614efb57614efa61b3f4565b5b6020026020010181815250506103e86064614f16919061b39a565b81600381518110614f2a57614f2961b3f4565b5b6020026020010181815250506103e860c8614f45919061b39a565b81600481518110614f5957614f5861b3f4565b5b6020026020010181815250506103e86101f4614f75919061b39a565b81600581518110614f8957614f8861b3f4565b5b6020026020010181815250506103e8610320614fa5919061b39a565b81600681518110614fb957614fb861b3f4565b5b6020026020010181815250506103e86104b0614fd5919061b39a565b81600781518110614fe957614fe861b3f4565b5b6020026020010181815250506103e8610640615005919061b39a565b816008815181106150195761501861b3f4565b5b6020026020010181815250506103e8610bb8615035919061b39a565b816009815181106150495761504861b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111561507b5761507a61a8a0565b5b6040519080825280602002602001820160405280156150a95781602001602082028036833780820191505090505b5090506007816000815181106150c2576150c161b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106150f2576150f161b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c1c0602a9139905090565b60606040518060400160405280600381526020017f696d780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff8111156151a6576151a561a8a0565b5b6040519080825280602002602001820160405280156151d45781602001602082028036833780820191505090505b5090506103e860006151e6919061b39a565b816000815181106151fa576151f961b3f4565b5b6020026020010181815250506103e8600a615215919061b39a565b816001815181106152295761522861b3f4565b5b6020026020010181815250506103e8601e615244919061b39a565b816002815181106152585761525761b3f4565b5b6020026020010181815250506103e86050615273919061b39a565b816003815181106152875761528661b3f4565b5b6020026020010181815250506103e860c86152a2919061b39a565b816004815181106152b6576152b561b3f4565b5b6020026020010181815250506103e86101f46152d2919061b39a565b816005815181106152e6576152e561b3f4565b5b6020026020010181815250506103e880615300919061b39a565b816006815181106153145761531361b3f4565b5b6020026020010181815250506103e86107d0615330919061b39a565b816007815181106153445761534361b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156153765761537561a8a0565b5b6040519080825280602002602001820160405280156153a45781602001602082028036833780820191505090505b5090506007816000815181106153bd576153bc61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106153ed576153ec61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c797602a9139905090565b60606040518060400160405280600381526020017f696e6a0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff8111156154a1576154a061a8a0565b5b6040519080825280602002602001820160405280156154cf5781602001602082028036833780820191505090505b5090506103e860006154e1919061b39a565b816000815181106154f5576154f461b3f4565b5b6020026020010181815250506103e86001615510919061b39a565b816001815181106155245761552361b3f4565b5b6020026020010181815250506103e8600561553f919061b39a565b816002815181106155535761555261b3f4565b5b6020026020010181815250506103e8601461556e919061b39a565b816003815181106155825761558161b3f4565b5b6020026020010181815250506103e8603261559d919061b39a565b816004815181106155b1576155b061b3f4565b5b6020026020010181815250506103e860506155cc919061b39a565b816005815181106155e0576155df61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156156125761561161a8a0565b5b6040519080825280602002602001820160405280156156405781602001602082028036833780820191505090505b5090506007816000815181106156595761565861b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106156895761568861b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c6c5602a9139905090565b60606040518060400160405280600381526020017f6c656f0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff81111561573d5761573c61a8a0565b5b60405190808252806020026020018201604052801561576b5781602001602082028036833780820191505090505b5090506103e8600061577d919061b39a565b816000815181106157915761579061b3f4565b5b6020026020010181815250506103e8600a6157ac919061b39a565b816001815181106157c0576157bf61b3f4565b5b6020026020010181815250506103e8601e6157db919061b39a565b816002815181106157ef576157ee61b3f4565b5b6020026020010181815250506103e8605061580a919061b39a565b8160038151811061581e5761581d61b3f4565b5b6020026020010181815250506103e860c8615839919061b39a565b8160048151811061584d5761584c61b3f4565b5b6020026020010181815250506103e86101f4615869919061b39a565b8160058151811061587d5761587c61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156158af576158ae61a8a0565b5b6040519080825280602002602001820160405280156158dd5781602001602082028036833780820191505090505b5090506007816000815181106158f6576158f561b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106159265761592561b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c214602a9139905090565b60606040518060400160405280600481526020017f6c696e6b00000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156159da576159d961a8a0565b5b604051908082528060200260200182016040528015615a085781602001602082028036833780820191505090505b5090506103e86000615a1a919061b39a565b81600081518110615a2e57615a2d61b3f4565b5b6020026020010181815250506103e86001615a49919061b39a565b81600181518110615a5d57615a5c61b3f4565b5b6020026020010181815250506103e86032615a78919061b39a565b81600281518110615a8c57615a8b61b3f4565b5b6020026020010181815250506103e86064615aa7919061b39a565b81600381518110615abb57615aba61b3f4565b5b6020026020010181815250506103e860c8615ad6919061b39a565b81600481518110615aea57615ae961b3f4565b5b6020026020010181815250506103e86101f4615b06919061b39a565b81600581518110615b1a57615b1961b3f4565b5b6020026020010181815250506103e8610320615b36919061b39a565b81600681518110615b4a57615b4961b3f4565b5b6020026020010181815250506103e86104b0615b66919061b39a565b81600781518110615b7a57615b7961b3f4565b5b6020026020010181815250506103e8610640615b96919061b39a565b81600881518110615baa57615ba961b3f4565b5b6020026020010181815250506103e8610bb8615bc6919061b39a565b81600981518110615bda57615bd961b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115615c0c57615c0b61a8a0565b5b604051908082528060200260200182016040528015615c3a5781602001602082028036833780820191505090505b509050600781600081518110615c5357615c5261b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110615c8357615c8261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c33a602a9139905090565b60606040518060600160405280602a815260200161c09a602a9139905090565b60606040518060400160405280600381526020017f6c69740000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115615d4057615d3f61a8a0565b5b604051908082528060200260200182016040528015615d6e5781602001602082028036833780820191505090505b5090506103e86000615d80919061b39a565b81600081518110615d9457615d9361b3f4565b5b6020026020010181815250506103e86001615daf919061b39a565b81600181518110615dc357615dc261b3f4565b5b6020026020010181815250506103e86032615dde919061b39a565b81600281518110615df257615df161b3f4565b5b6020026020010181815250506103e86064615e0d919061b39a565b81600381518110615e2157615e2061b3f4565b5b6020026020010181815250506103e860c8615e3c919061b39a565b81600481518110615e5057615e4f61b3f4565b5b6020026020010181815250506103e86101f4615e6c919061b39a565b81600581518110615e8057615e7f61b3f4565b5b6020026020010181815250506103e8610320615e9c919061b39a565b81600681518110615eb057615eaf61b3f4565b5b6020026020010181815250506103e86104b0615ecc919061b39a565b81600781518110615ee057615edf61b3f4565b5b6020026020010181815250506103e8610640615efc919061b39a565b81600881518110615f1057615f0f61b3f4565b5b6020026020010181815250506103e8610bb8615f2c919061b39a565b81600981518110615f4057615f3f61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115615f7257615f7161a8a0565b5b604051908082528060200260200182016040528015615fa05781602001602082028036833780820191505090505b509050600781600081518110615fb957615fb861b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110615fe957615fe861b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c5f3602a9139905090565b60606040518060600160405280602a815260200161c5f3602a9139905090565b60606040518060400160405280600581526020017f6d61746963000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156160a6576160a561a8a0565b5b6040519080825280602002602001820160405280156160d45781602001602082028036833780820191505090505b5090506103e860006160e6919061b39a565b816000815181106160fa576160f961b3f4565b5b6020026020010181815250506103e86001616115919061b39a565b816001815181106161295761612861b3f4565b5b6020026020010181815250506103e86032616144919061b39a565b816002815181106161585761615761b3f4565b5b6020026020010181815250506103e86064616173919061b39a565b816003815181106161875761618661b3f4565b5b6020026020010181815250506103e860c86161a2919061b39a565b816004815181106161b6576161b561b3f4565b5b6020026020010181815250506103e86101f46161d2919061b39a565b816005815181106161e6576161e561b3f4565b5b6020026020010181815250506103e8610320616202919061b39a565b816006815181106162165761621561b3f4565b5b6020026020010181815250506103e86104b0616232919061b39a565b816007815181106162465761624561b3f4565b5b6020026020010181815250506103e8610640616262919061b39a565b816008815181106162765761627561b3f4565b5b6020026020010181815250506103e8610bb8616292919061b39a565b816009815181106162a6576162a561b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156162d8576162d761a8a0565b5b6040519080825280602002602001820160405280156163065781602001602082028036833780820191505090505b50905060078160008151811061631f5761631e61b3f4565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811061634f5761634e61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c364602a9139905090565b60606040518060600160405280602a815260200161c8bd602a9139905090565b60606040518060400160405280600481526020017f6d63727400000000000000000000000000000000000000000000000000000000815250905090565b60606000600667ffffffffffffffff81111561640c5761640b61a8a0565b5b60405190808252806020026020018201604052801561643a5781602001602082028036833780820191505090505b5090506103e8600061644c919061b39a565b816000815181106164605761645f61b3f4565b5b6020026020010181815250506103e86107d061647c919061b39a565b816001815181106164905761648f61b3f4565b5b6020026020010181815250506103e86127106164ac919061b39a565b816002815181106164c0576164bf61b3f4565b5b6020026020010181815250506103e861c3506164dc919061b39a565b816003815181106164f0576164ef61b3f4565b5b6020026020010181815250506103e8620249f061650d919061b39a565b816004815181106165215761652061b3f4565b5b6020026020010181815250506103e86207a12061653e919061b39a565b816005815181106165525761655161b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156165845761658361a8a0565b5b6040519080825280602002602001820160405280156165b25781602001602082028036833780820191505090505b5090506007816000815181106165cb576165ca61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106165fb576165fa61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c40c602a9139905090565b60606040518060600160405280602a815260200161c48a602a9139905090565b60606040518060400160405280600381526020017f6e66700000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156166b8576166b761a8a0565b5b6040519080825280602002602001820160405280156166e65781602001602082028036833780820191505090505b5090506103e860006166f8919061b39a565b8160008151811061670c5761670b61b3f4565b5b6020026020010181815250506103e86001616727919061b39a565b8160018151811061673b5761673a61b3f4565b5b6020026020010181815250506103e86032616756919061b39a565b8160028151811061676a5761676961b3f4565b5b6020026020010181815250506103e86064616785919061b39a565b816003815181106167995761679861b3f4565b5b6020026020010181815250506103e860c86167b4919061b39a565b816004815181106167c8576167c761b3f4565b5b6020026020010181815250506103e86101f46167e4919061b39a565b816005815181106167f8576167f761b3f4565b5b6020026020010181815250506103e8610320616814919061b39a565b816006815181106168285761682761b3f4565b5b6020026020010181815250506103e86104b0616844919061b39a565b816007815181106168585761685761b3f4565b5b6020026020010181815250506103e8610640616874919061b39a565b816008815181106168885761688761b3f4565b5b6020026020010181815250506103e8610bb86168a4919061b39a565b816009815181106168b8576168b761b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156168ea576168e961a8a0565b5b6040519080825280602002602001820160405280156169185781602001602082028036833780820191505090505b5090506007816000815181106169315761693061b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106169615761696061b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c61d602a9139905090565b606060405180602001604052806000815250905090565b60606040518060400160405280600681526020017f70656f706c650000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115616a1557616a1461a8a0565b5b604051908082528060200260200182016040528015616a435781602001602082028036833780820191505090505b5090506103e86000616a55919061b39a565b81600081518110616a6957616a6861b3f4565b5b6020026020010181815250506103e86001616a84919061b39a565b81600181518110616a9857616a9761b3f4565b5b6020026020010181815250506103e86032616ab3919061b39a565b81600281518110616ac757616ac661b3f4565b5b6020026020010181815250506103e86064616ae2919061b39a565b81600381518110616af657616af561b3f4565b5b6020026020010181815250506103e860c8616b11919061b39a565b81600481518110616b2557616b2461b3f4565b5b6020026020010181815250506103e86101f4616b41919061b39a565b81600581518110616b5557616b5461b3f4565b5b6020026020010181815250506103e8610320616b71919061b39a565b81600681518110616b8557616b8461b3f4565b5b6020026020010181815250506103e86104b0616ba1919061b39a565b81600781518110616bb557616bb461b3f4565b5b6020026020010181815250506103e8610640616bd1919061b39a565b81600881518110616be557616be461b3f4565b5b6020026020010181815250506103e8610bb8616c01919061b39a565b81600981518110616c1557616c1461b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115616c4757616c4661a8a0565b5b604051908082528060200260200182016040528015616c755781602001602082028036833780820191505090505b509050600781600081518110616c8e57616c8d61b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110616cbe57616cbd61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c1ea602a9139905090565b60606040518060400160405280600481526020017f7368696200000000000000000000000000000000000000000000000000000000815250905090565b60606000600867ffffffffffffffff811115616d7257616d7161a8a0565b5b604051908082528060200260200182016040528015616da05781602001602082028036833780820191505090505b5090506103e86000616db2919061b39a565b81600081518110616dc657616dc561b3f4565b5b6020026020010181815250506103e862061a80616de3919061b39a565b81600181518110616df757616df661b3f4565b5b6020026020010181815250506103e8621e8480616e14919061b39a565b81600281518110616e2857616e2761b3f4565b5b6020026020010181815250506103e862989680616e45919061b39a565b81600381518110616e5957616e5861b3f4565b5b6020026020010181815250506103e86301312d00616e77919061b39a565b81600481518110616e8b57616e8a61b3f4565b5b6020026020010181815250506103e86302625a00616ea9919061b39a565b81600581518110616ebd57616ebc61b3f4565b5b6020026020010181815250506103e86305f5e100616edb919061b39a565b81600681518110616eef57616eee61b3f4565b5b6020026020010181815250506103e8630bebc200616f0d919061b39a565b81600781518110616f2157616f2061b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115616f5357616f5261a8a0565b5b604051908082528060200260200182016040528015616f815781602001602082028036833780820191505090505b509050600781600081518110616f9a57616f9961b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110616fca57616fc961b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c38e602a9139905090565b60606040518060400160405280600381526020017f736f6c0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111561707e5761707d61a8a0565b5b6040519080825280602002602001820160405280156170ac5781602001602082028036833780820191505090505b5090506103e860006170be919061b39a565b816000815181106170d2576170d161b3f4565b5b6020026020010181815250506103e860016170ed919061b39a565b816001815181106171015761710061b3f4565b5b6020026020010181815250506103e8603261711c919061b39a565b816002815181106171305761712f61b3f4565b5b6020026020010181815250506103e8606461714b919061b39a565b8160038151811061715f5761715e61b3f4565b5b6020026020010181815250506103e860c861717a919061b39a565b8160048151811061718e5761718d61b3f4565b5b6020026020010181815250506103e86101f46171aa919061b39a565b816005815181106171be576171bd61b3f4565b5b6020026020010181815250506103e86103206171da919061b39a565b816006815181106171ee576171ed61b3f4565b5b6020026020010181815250506103e86104b061720a919061b39a565b8160078151811061721e5761721d61b3f4565b5b6020026020010181815250506103e861064061723a919061b39a565b8160088151811061724e5761724d61b3f4565b5b6020026020010181815250506103e8610bb861726a919061b39a565b8160098151811061727e5761727d61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156172b0576172af61a8a0565b5b6040519080825280602002602001820160405280156172de5781602001602082028036833780820191505090505b5090506007816000815181106172f7576172f661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106173275761732661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c743602a9139905090565b60606040518060600160405280602a815260200161c869602a9139905090565b60606040518060400160405280600781526020017f7370616365696400000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156173e4576173e361a8a0565b5b6040519080825280602002602001820160405280156174125781602001602082028036833780820191505090505b5090506103e86000617424919061b39a565b816000815181106174385761743761b3f4565b5b6020026020010181815250506103e86001617453919061b39a565b816001815181106174675761746661b3f4565b5b6020026020010181815250506103e86032617482919061b39a565b816002815181106174965761749561b3f4565b5b6020026020010181815250506103e860646174b1919061b39a565b816003815181106174c5576174c461b3f4565b5b6020026020010181815250506103e860c86174e0919061b39a565b816004815181106174f4576174f361b3f4565b5b6020026020010181815250506103e86101f4617510919061b39a565b816005815181106175245761752361b3f4565b5b6020026020010181815250506103e8610320617540919061b39a565b816006815181106175545761755361b3f4565b5b6020026020010181815250506103e86104b0617570919061b39a565b816007815181106175845761758361b3f4565b5b6020026020010181815250506103e86106406175a0919061b39a565b816008815181106175b4576175b361b3f4565b5b6020026020010181815250506103e8610bb86175d0919061b39a565b816009815181106175e4576175e361b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156176165761761561a8a0565b5b6040519080825280602002602001820160405280156176445781602001602082028036833780820191505090505b50905060078160008151811061765d5761765c61b3f4565b5b602002602001019063ffffffff16908163ffffffff168152505060088160018151811061768d5761768c61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c83f602a9139905090565b60606040518060600160405280602a815260200161c83f602a9139905090565b60606040518060400160405280600381526020017f746f6e0000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff81111561774a5761774961a8a0565b5b6040519080825280602002602001820160405280156177785781602001602082028036833780820191505090505b5090506103e8600061778a919061b39a565b8160008151811061779e5761779d61b3f4565b5b6020026020010181815250506103e860016177b9919061b39a565b816001815181106177cd576177cc61b3f4565b5b6020026020010181815250506103e860326177e8919061b39a565b816002815181106177fc576177fb61b3f4565b5b6020026020010181815250506103e86064617817919061b39a565b8160038151811061782b5761782a61b3f4565b5b6020026020010181815250506103e860c8617846919061b39a565b8160048151811061785a5761785961b3f4565b5b6020026020010181815250506103e86101f4617876919061b39a565b8160058151811061788a5761788961b3f4565b5b6020026020010181815250506103e86103206178a6919061b39a565b816006815181106178ba576178b961b3f4565b5b6020026020010181815250506103e86104b06178d6919061b39a565b816007815181106178ea576178e961b3f4565b5b6020026020010181815250506103e8610640617906919061b39a565b8160088151811061791a5761791961b3f4565b5b6020026020010181815250506103e8610bb8617936919061b39a565b8160098151811061794a5761794961b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111561797c5761797b61a8a0565b5b6040519080825280602002602001820160405280156179aa5781602001602082028036833780820191505090505b5090506007816000815181106179c3576179c261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106179f3576179f261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c292602a9139905090565b60606040518060600160405280602a815260200161c532602a9139905090565b60606040518060400160405280600381526020017f7472780000000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115617ab057617aaf61a8a0565b5b604051908082528060200260200182016040528015617ade5781602001602082028036833780820191505090505b5090506103e86000617af0919061b39a565b81600081518110617b0457617b0361b3f4565b5b6020026020010181815250506103e86001617b1f919061b39a565b81600181518110617b3357617b3261b3f4565b5b6020026020010181815250506103e86032617b4e919061b39a565b81600281518110617b6257617b6161b3f4565b5b6020026020010181815250506103e86064617b7d919061b39a565b81600381518110617b9157617b9061b3f4565b5b6020026020010181815250506103e860c8617bac919061b39a565b81600481518110617bc057617bbf61b3f4565b5b6020026020010181815250506103e86101f4617bdc919061b39a565b81600581518110617bf057617bef61b3f4565b5b6020026020010181815250506103e8610320617c0c919061b39a565b81600681518110617c2057617c1f61b3f4565b5b6020026020010181815250506103e86104b0617c3c919061b39a565b81600781518110617c5057617c4f61b3f4565b5b6020026020010181815250506103e8610640617c6c919061b39a565b81600881518110617c8057617c7f61b3f4565b5b6020026020010181815250506103e8610bb8617c9c919061b39a565b81600981518110617cb057617caf61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115617ce257617ce161a8a0565b5b604051908082528060200260200182016040528015617d105781602001602082028036833780820191505090505b509050600781600081518110617d2957617d2861b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110617d5957617d5861b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c3b8602a9139905090565b60606040518060600160405280602a815260200161c719602a9139905090565b60606040518060400160405280600481526020017f7475736400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115617e1657617e1561a8a0565b5b604051908082528060200260200182016040528015617e445781602001602082028036833780820191505090505b5090506103e86000617e56919061b39a565b81600081518110617e6a57617e6961b3f4565b5b6020026020010181815250506103e86001617e85919061b39a565b81600181518110617e9957617e9861b3f4565b5b6020026020010181815250506103e86032617eb4919061b39a565b81600281518110617ec857617ec761b3f4565b5b6020026020010181815250506103e86064617ee3919061b39a565b81600381518110617ef757617ef661b3f4565b5b6020026020010181815250506103e860c8617f12919061b39a565b81600481518110617f2657617f2561b3f4565b5b6020026020010181815250506103e86101f4617f42919061b39a565b81600581518110617f5657617f5561b3f4565b5b6020026020010181815250506103e8610320617f72919061b39a565b81600681518110617f8657617f8561b3f4565b5b6020026020010181815250506103e86104b0617fa2919061b39a565b81600781518110617fb657617fb561b3f4565b5b6020026020010181815250506103e8610640617fd2919061b39a565b81600881518110617fe657617fe561b3f4565b5b6020026020010181815250506103e8610bb8618002919061b39a565b816009815181106180165761801561b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156180485761804761a8a0565b5b6040519080825280602002602001820160405280156180765781602001602082028036833780820191505090505b50905060078160008151811061808f5761808e61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106180bf576180be61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c196602a9139905090565b60606040518060600160405280602a815260200161c2bc602a9139905090565b60606040518060400160405280600381526020017f756e690000000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff81111561817c5761817b61a8a0565b5b6040519080825280602002602001820160405280156181aa5781602001602082028036833780820191505090505b5090506103e860006181bc919061b39a565b816000815181106181d0576181cf61b3f4565b5b6020026020010181815250506103e8600a6181eb919061b39a565b816001815181106181ff576181fe61b3f4565b5b6020026020010181815250506103e8601e61821a919061b39a565b8160028151811061822e5761822d61b3f4565b5b6020026020010181815250506103e86050618249919061b39a565b8160038151811061825d5761825c61b3f4565b5b6020026020010181815250506103e860c8618278919061b39a565b8160048151811061828c5761828b61b3f4565b5b6020026020010181815250506103e86101f46182a8919061b39a565b816005815181106182bc576182bb61b3f4565b5b6020026020010181815250506103e8806182d6919061b39a565b816006815181106182ea576182e961b3f4565b5b6020026020010181815250506103e86107d0618306919061b39a565b8160078151811061831a5761831961b3f4565b5b6020026020010181815250506103e8611388618336919061b39a565b8160088151811061834a5761834961b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff81111561837c5761837b61a8a0565b5b6040519080825280602002602001820160405280156183aa5781602001602082028036833780820191505090505b5090506007816000815181106183c3576183c261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106183f3576183f261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c4b4602a9139905090565b60606040518060600160405280602a815260200161c96b602a9139905090565b60606040518060400160405280600481526020017f7573646300000000000000000000000000000000000000000000000000000000815250905090565b60606000600967ffffffffffffffff8111156184b0576184af61a8a0565b5b6040519080825280602002602001820160405280156184de5781602001602082028036833780820191505090505b5090506103e860006184f0919061b39a565b816000815181106185045761850361b3f4565b5b6020026020010181815250506103e8600a61851f919061b39a565b816001815181106185335761853261b3f4565b5b6020026020010181815250506103e8601e61854e919061b39a565b816002815181106185625761856161b3f4565b5b6020026020010181815250506103e8605061857d919061b39a565b816003815181106185915761859061b3f4565b5b6020026020010181815250506103e860c86185ac919061b39a565b816004815181106185c0576185bf61b3f4565b5b6020026020010181815250506103e86101f46185dc919061b39a565b816005815181106185f0576185ef61b3f4565b5b6020026020010181815250506103e88061860a919061b39a565b8160068151811061861e5761861d61b3f4565b5b6020026020010181815250506103e86107d061863a919061b39a565b8160078151811061864e5761864d61b3f4565b5b6020026020010181815250506103e861138861866a919061b39a565b8160088151811061867e5761867d61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156186b0576186af61a8a0565b5b6040519080825280602002602001820160405280156186de5781602001602082028036833780820191505090505b5090506007816000815181106186f7576186f661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106187275761872661b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c118602a9139905090565b60606040518060600160405280602a815260200161c647602a9139905090565b60606040518060400160405280600481526020017f7573646400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff8111156187e4576187e361a8a0565b5b6040519080825280602002602001820160405280156188125781602001602082028036833780820191505090505b5090506103e86000618824919061b39a565b816000815181106188385761883761b3f4565b5b6020026020010181815250506103e86001618853919061b39a565b816001815181106188675761886661b3f4565b5b6020026020010181815250506103e86032618882919061b39a565b816002815181106188965761889561b3f4565b5b6020026020010181815250506103e860646188b1919061b39a565b816003815181106188c5576188c461b3f4565b5b6020026020010181815250506103e860c86188e0919061b39a565b816004815181106188f4576188f361b3f4565b5b6020026020010181815250506103e86101f4618910919061b39a565b816005815181106189245761892361b3f4565b5b6020026020010181815250506103e8610320618940919061b39a565b816006815181106189545761895361b3f4565b5b6020026020010181815250506103e86104b0618970919061b39a565b816007815181106189845761898361b3f4565b5b6020026020010181815250506103e86106406189a0919061b39a565b816008815181106189b4576189b361b3f4565b5b6020026020010181815250506103e8610bb86189d0919061b39a565b816009815181106189e4576189e361b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115618a1657618a1561a8a0565b5b604051908082528060200260200182016040528015618a445781602001602082028036833780820191505090505b509050600781600081518110618a5d57618a5c61b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110618a8d57618a8c61b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c8e7602a9139905090565b60606040518060600160405280602a815260200161c142602a9139905090565b60606040518060400160405280600481526020017f7573647400000000000000000000000000000000000000000000000000000000815250905090565b60606000600a67ffffffffffffffff811115618b4a57618b4961a8a0565b5b604051908082528060200260200182016040528015618b785781602001602082028036833780820191505090505b5090506103e86000618b8a919061b39a565b81600081518110618b9e57618b9d61b3f4565b5b6020026020010181815250506103e86001618bb9919061b39a565b81600181518110618bcd57618bcc61b3f4565b5b6020026020010181815250506103e86032618be8919061b39a565b81600281518110618bfc57618bfb61b3f4565b5b6020026020010181815250506103e86064618c17919061b39a565b81600381518110618c2b57618c2a61b3f4565b5b6020026020010181815250506103e860c8618c46919061b39a565b81600481518110618c5a57618c5961b3f4565b5b6020026020010181815250506103e86101f4618c76919061b39a565b81600581518110618c8a57618c8961b3f4565b5b6020026020010181815250506103e8610320618ca6919061b39a565b81600681518110618cba57618cb961b3f4565b5b6020026020010181815250506103e86104b0618cd6919061b39a565b81600781518110618cea57618ce961b3f4565b5b6020026020010181815250506103e8610640618d06919061b39a565b81600881518110618d1a57618d1961b3f4565b5b6020026020010181815250506103e8610bb8618d36919061b39a565b81600981518110618d4a57618d4961b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff811115618d7c57618d7b61a8a0565b5b604051908082528060200260200182016040528015618daa5781602001602082028036833780820191505090505b509050600781600081518110618dc357618dc261b3f4565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110618df357618df261b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60606040518060600160405280602a815260200161c815602a9139905090565b60606040518060600160405280602a815260200161c69b602a9139905090565b60606040518060400160405280600481526020017f7762746300000000000000000000000000000000000000000000000000000000815250905090565b60606000600e67ffffffffffffffff811115618eb057618eaf61a8a0565b5b604051908082528060200260200182016040528015618ede5781602001602082028036833780820191505090505b509050600081600081518110618ef757618ef661b3f4565b5b602002602001018181525050600181600181518110618f1957618f1861b3f4565b5b602002602001018181525050606481600281518110618f3b57618f3a61b3f4565b5b60200260200101818152505061012c81600381518110618f5e57618f5d61b3f4565b5b60200260200101818152505061025881600481518110618f8157618f8061b3f4565b5b6020026020010181815250506103e881600581518110618fa457618fa361b3f4565b5b6020026020010181815250506107d081600681518110618fc757618fc661b3f4565b5b60200260200101818152505061138881600781518110618fea57618fe961b3f4565b5b6020026020010181815250506127108160088151811061900d5761900c61b3f4565b5b602002602001018181525050613a98816009815181106190305761902f61b3f4565b5b6020026020010181815250506161a881600a815181106190535761905261b3f4565b5b60200260200101818152505061753081600b815181106190765761907561b3f4565b5b602002602001018181525050619c4081600c815181106190995761909861b3f4565b5b60200260200101818152505061c35081600d815181106190bc576190bb61b3f4565b5b6020026020010181815250508091505090565b60606000600267ffffffffffffffff8111156190ee576190ed61a8a0565b5b60405190808252806020026020018201604052801561911c5781602001602082028036833780820191505090505b5090506007816000815181106191355761913461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250506008816001815181106191655761916461b3f4565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b606060405180602001604052806000815250905090565b60606040518060600160405280602a815260200161c436602a9139905090565b6000806000905060008551905060005b8181101561928a5760008782815181106191ea576191e961b3f4565b5b602002602001015190506000816040015151905060005b818163ffffffff16101561927457600083604001518263ffffffff168151811061922e5761922d61b3f4565b5b60200260200101519050619241816195db565b156192605761925284828c8c619622565b8761925d919061b423565b96505b50808061926c9061b479565b915050619201565b50505080806192829061b4a6565b9150506191cd565b5081925050509392505050565b600080600080600185516192ab919061b4ef565b90506000806000600190505b87518163ffffffff161015619346576192ce619a77565b600a6192da919061b663565b888263ffffffff16815181106192f3576192f261b3f4565b5b6020026020010151619305919061b39a565b6103e88a619313919061b39a565b101561933357600181619326919061b6ae565b63ffffffff169350619346565b808061933e9061b479565b9150506192b7565b5060018751619355919061b4ef565b8314156193a15786838151811061936f5761936e61b3f4565b5b602002602001015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90506193e8565b8683815181106193b4576193b361b3f4565b5b60200260200101519150866001846193cc919061b423565b815181106193dd576193dc61b3f4565b5b602002602001015190505b8282829550955095505050509250925092565b606060006040518060400160405280600f81526020017f24686f6c64696e675f616d6f756e74000000000000000000000000000000000081525090506000604051806040016040528060008713619453576002619456565b60035b60ff1667ffffffffffffffff8111156194725761947161a8a0565b5b6040519080825280602002602001820160405280156194ab57816020015b61949861a7f0565b8152602001906001900390816194905790505b5081526020016001151581525090506194fe8160006040518060400160405280600681526020017f24746f6b656e0000000000000000000000000000000000000000000000000000815250600488619a80565b5061952381600184600261951e6103e88c619519919061b711565b619ab2565b619a80565b5060008513156195535761955181600284600161954c6103e88b619547919061b711565b619ab2565b619a80565b505b6000600167ffffffffffffffff8111156195705761956f61a8a0565b5b6040519080825280602002602001820160405280156195a357816020015b606081526020019060019003908161958e5790505b5090506195af82619b8a565b816000815181106195c3576195c261b3f4565b5b60200260200101819052508093505050509392505050565b6000600863ffffffff168263ffffffff1614806196045750600763ffffffff168263ffffffff16145b8061961b5750600963ffffffff168263ffffffff16145b9050919050565b6000806000619635868860200151619d5a565b915091508115619a685760606000600886604051619653919061b1d2565b90815260200160405180910390208054806020026020016040519081016040528092919081815260200182805480156196d757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161969a5790505b505050505090506000805b82518163ffffffff161015619a5a5760036000848363ffffffff168151811061970e5761970d61b3f4565b5b602002602001015163ffffffff1663ffffffff168152602001908152602001600020805461973b9061b218565b80601f01602080910402602001604051908101604052809291908181526020018280546197679061b218565b80156197b45780601f10619789576101008083540402835291602001916197b4565b820191906000526020600020905b81548152906001019060200180831161979757829003601f168201915b5050505050935060046000848363ffffffff16815181106197d8576197d761b3f4565b5b602002602001015163ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff16619a4757600060058960405161981e919061b1d2565b90815260200160405180910390206000858463ffffffff16815181106198475761984661b3f4565b5b602002602001015163ffffffff1663ffffffff16815260200190815260200160002080546198749061b218565b80601f01602080910402602001604051908101604052809291908181526020018280546198a09061b218565b80156198ed5780601f106198c2576101008083540402835291602001916198ed565b820191906000526020600020905b8154815290600101906020018083116198d057829003601f168201915b50505050509050600963ffffffff16848363ffffffff16815181106199155761991461b3f4565b5b602002602001015163ffffffff16141561995557600061993f8b87898d61993a619a77565b619dc3565b9050808461994d919061b423565b9350506199ed565b600863ffffffff16848363ffffffff16815181106199765761997561b3f4565b5b602002602001015163ffffffff1614806199bc5750600763ffffffff16848363ffffffff16815181106199ac576199ab61b3f4565b5b602002602001015163ffffffff16145b156199ec576000806199d0878d858b619f50565b9150915081156199e95780856199e6919061b423565b94505b50505b5b600160046000868563ffffffff1681518110619a0c57619a0b61b3f4565b5b602002602001015163ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b8080619a529061b479565b9150506196e2565b508095505050505050619a6f565b6000925050505b949350505050565b60006012905090565b619a8861a823565b619a95868686868661a102565b600186602001901515908115158152505085905095945050505050565b606060006001619ac18461a158565b01905060008167ffffffffffffffff811115619ae057619adf61a8a0565b5b6040519080825280601f01601f191660200182016040528015619b125781602001600182028036833780820191505090505b509050600082602001820190505b600115619b7f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581619b6957619b6861b6e2565b5b0494506000851415619b7a57619b7f565b619b20565b819350505050919050565b606060006040518060400160405280600181526020017f7b00000000000000000000000000000000000000000000000000000000000000815250905060008360000151511115619d2f57808360200151619c19576040518060400160405280600681526020017f226f72223a5b0000000000000000000000000000000000000000000000000000815250619c50565b6040518060400160405280600781526020017f22616e64223a5b000000000000000000000000000000000000000000000000008152505b604051602001619c6192919061b742565b604051602081830303815290604052905060005b836000015151811015619d0b576000811115619cae5781604051602001619c9c919061b7b2565b60405160208183030381529060405291505b81619cd685600001518381518110619cc957619cc861b3f4565b5b602002602001015161a2ab565b604051602001619ce792919061b742565b60405160208183030381529060405291508080619d039061b4a6565b915050619c75565b5080604051602001619d1d919061b820565b60405160208183030381529060405290505b80604051602001619d40919061b88e565b604051602081830303815290604052905080915050919050565b6000606060008484604051602001619d7392919061b914565b6040516020818303038152906040529050600081519050604051611000818360208601600061041c600019f1619da857600080fd5b80945060408101935061100081016040525050509250929050565b600080858486604051602001619ddb9392919061b9dc565b60405160208183030381529060405290506000600167ffffffffffffffff811115619e0957619e0861a8a0565b5b604051908082528060200260200182016040528015619e4257816020015b619e2f61a83f565b815260200190600190039081619e275790505b50905060405180604001604052806040518060400160405280600781526020017f6170692d6b657900000000000000000000000000000000000000000000000000815250815260200189600181518110619e9f57619e9e61b3f4565b5b602002602001015181525081600081518110619ebe57619ebd61b3f4565b5b6020026020010181905250600080619f0c846040518060400160405280601e81526020017f2f646174612f6c6973742f302f617661696c61626c655f62616c616e636500008152508561a2ec565b915091508115619f3e57600080619f23838961a365565b915091508115619f3b57809650505050505050619f47565b50505b60009450505050505b95945050505050565b60008060008067ffffffffffffffff811115619f6f57619f6e61a8a0565b5b604051908082528060200260200182016040528015619fa857816020015b619f9561a83f565b815260200190600190039081619f8d5790505b509050606060008888600081518110619fc457619fc361b3f4565b5b6020026020010151604051602001619fdd92919061b742565b60405160208183030381529060405290507f9b01d545332e4cf8fd9fdc967124906a604e53cb830a054b30685e6e2723ae8b8780519060200120141561a044578560405160200161a02e919061bb07565b604051602081830303815290604052915061a087565b602a8751141561a07757868660405160200161a06192919061bc18565b604051602081830303815290604052915061a086565b6000809450945050505061a0f9565b5b60008061a0cb836040518060400160405280600781526020017f2f726573756c7400000000000000000000000000000000000000000000000000815250868861a3cd565b91509150811561a0ec5761a0de8161a449565b96509650505050505061a0f9565b6000809650965050505050505b94509492505050565b604051806060016040528084815260200183600581111561a1265761a12561bc5d565b5b8152602001828152508560000151858151811061a1465761a14561b3f4565b5b60200260200101819052505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a1b6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161a1ac5761a1ab61b6e2565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061a1f3576d04ee2d6d415b85acef8100000000838161a1e95761a1e861b6e2565b5b0492506020810190505b662386f26fc10000831061a22257662386f26fc10000838161a2185761a21761b6e2565b5b0492506010810190505b6305f5e100831061a24b576305f5e100838161a2415761a24061b6e2565b5b0492506008810190505b612710831061a27057612710838161a2665761a26561b6e2565b5b0492506004810190505b6064831061a293576064838161a2895761a28861b6e2565b5b0492506002810190505b600a831061a2a2576001810190505b80915050919050565b6060816000015161a2bf836020015161a4ad565b836040015160405160200161a2d69392919061bdbc565b6040516020818303038152906040529050919050565b6000606060006060600087878760405160200161a30b9392919061bf1f565b604051602081830303815290604052905060008151905060405161100081836020860160006103ea600019f161a34057600080fd5b8051945060408101935061100081016040525083839550955050505050935093915050565b6000806000848460405160200161a37d92919061bf7a565b60405160208183030381529060405290506000815190506040516082818360208601600061041e600019f161a3b157600080fd5b8051945060208101519350608281016040525050509250929050565b600060606000606060008888888860405160200161a3ee949392919061bfaa565b604051602081830303815290604052905060008151905060405161100081836020860160006103ed600019f161a42357600080fd5b805194506040810193506110008101604052508383955095505050505094509492505050565b60008060008360405160200161a45f919061c00b565b60405160208183030381529060405290506000815190506040516082818360208601600061041d600019f161a49357600080fd5b805194506020810151935060828101604052505050915091565b60606004600581111561a4c35761a4c261bc5d565b5b82600581111561a4d65761a4d561bc5d565b5b141561a519576040518060400160405280600281526020017f3d3d000000000000000000000000000000000000000000000000000000000000815250905061a765565b6000600581111561a52d5761a52c61bc5d565b5b82600581111561a5405761a53f61bc5d565b5b141561a583576040518060400160405280600181526020017f3e00000000000000000000000000000000000000000000000000000000000000815250905061a765565b6001600581111561a5975761a59661bc5d565b5b82600581111561a5aa5761a5a961bc5d565b5b141561a5ed576040518060400160405280600181526020017f3c00000000000000000000000000000000000000000000000000000000000000815250905061a765565b6002600581111561a6015761a60061bc5d565b5b82600581111561a6145761a61361bc5d565b5b141561a657576040518060400160405280600281526020017f3e3d000000000000000000000000000000000000000000000000000000000000815250905061a765565b6003600581111561a66b5761a66a61bc5d565b5b82600581111561a67e5761a67d61bc5d565b5b141561a6c1576040518060400160405280600281526020017f3c3d000000000000000000000000000000000000000000000000000000000000815250905061a765565b60058081111561a6d45761a6d361bc5d565b5b82600581111561a6e75761a6e661bc5d565b5b141561a72a576040518060400160405280600281526020017f213d000000000000000000000000000000000000000000000000000000000000815250905061a765565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161a75c9061c079565b60405180910390fd5b919050565b82805461a7769061b218565b90600052602060002090601f01602090048101928261a798576000855561a7df565b82601f1061a7b157805160ff191683800117855561a7df565b8280016001018555821561a7df579182015b8281111561a7de57825182559160200191906001019061a7c3565b5b50905061a7ec919061a859565b5090565b6040518060600160405280606081526020016000600581111561a8165761a81561bc5d565b5b8152602001606081525090565b6040518060400160405280606081526020016000151581525090565b604051806040016040528060608152602001606081525090565b5b8082111561a87257600081600090555060010161a85a565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61a8d88261a88f565b810181811067ffffffffffffffff8211171561a8f75761a8f661a8a0565b5b80604052505050565b600061a90a61a876565b905061a916828261a8cf565b919050565b600067ffffffffffffffff82111561a9365761a93561a8a0565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b61a96f8161a956565b811461a97a57600080fd5b50565b60008135905061a98c8161a966565b92915050565b600080fd5b600067ffffffffffffffff82111561a9b25761a9b161a8a0565b5b61a9bb8261a88f565b9050602081019050919050565b82818337600083830152505050565b600061a9ea61a9e58461a997565b61a900565b90508281526020810184848401111561aa065761aa0561a992565b5b61aa1184828561a9c8565b509392505050565b600082601f83011261aa2e5761aa2d61a88a565b5b813561aa3e84826020860161a9d7565b91505092915050565b600067ffffffffffffffff82111561aa625761aa6161a8a0565b5b602082029050602081019050919050565b600061aa8661aa818461aa47565b61a900565b9050808382526020820190506020840283018581111561aaa95761aaa861a947565b5b835b8181101561aad2578061aabe888261a97d565b84526020840193505060208101905061aaab565b5050509392505050565b600082601f83011261aaf15761aaf061a88a565b5b813561ab0184826020860161aa73565b91505092915050565b60006060828403121561ab205761ab1f61a94c565b5b61ab2a606061a900565b9050600061ab3a8482850161a97d565b600083015250602082013567ffffffffffffffff81111561ab5e5761ab5d61a951565b5b61ab6a8482850161aa19565b602083015250604082013567ffffffffffffffff81111561ab8e5761ab8d61a951565b5b61ab9a8482850161aadc565b60408301525092915050565b600061abb961abb48461a91b565b61a900565b9050808382526020820190506020840283018581111561abdc5761abdb61a947565b5b835b8181101561ac2357803567ffffffffffffffff81111561ac015761ac0061a88a565b5b80860161ac0e898261ab0a565b8552602085019450505060208101905061abde565b5050509392505050565b600082601f83011261ac425761ac4161a88a565b5b813561ac5284826020860161aba6565b91505092915050565b600067ffffffffffffffff82111561ac765761ac7561a8a0565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561aca25761aca161a8a0565b5b61acab8261a88f565b9050602081019050919050565b600061accb61acc68461ac87565b61a900565b90508281526020810184848401111561ace75761ace661a992565b5b61acf284828561a9c8565b509392505050565b600082601f83011261ad0f5761ad0e61a88a565b5b813561ad1f84826020860161acb8565b91505092915050565b600061ad3b61ad368461ac5b565b61a900565b9050808382526020820190506020840283018581111561ad5e5761ad5d61a947565b5b835b8181101561ada557803567ffffffffffffffff81111561ad835761ad8261a88a565b5b80860161ad90898261acfa565b8552602085019450505060208101905061ad60565b5050509392505050565b600082601f83011261adc45761adc361a88a565b5b813561add484826020860161ad28565b91505092915050565b60008060006060848603121561adf65761adf561a880565b5b600084013567ffffffffffffffff81111561ae145761ae1361a885565b5b61ae208682870161ac2d565b935050602084013567ffffffffffffffff81111561ae415761ae4061a885565b5b61ae4d8682870161adaf565b925050604084013567ffffffffffffffff81111561ae6e5761ae6d61a885565b5b61ae7a8682870161aa19565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60005b8381101561aebe57808201518184015260208101905061aea3565b8381111561aecd576000848401525b50505050565b600061aede8261ae84565b61aee8818561ae8f565b935061aef881856020860161aea0565b61af018161a88f565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b600061af548261ae84565b61af5e818561af38565b935061af6e81856020860161aea0565b61af778161a88f565b840191505092915050565b600061af8e838361af49565b905092915050565b6000602082019050919050565b600061afae8261af0c565b61afb8818561af17565b93508360208202850161afca8561af28565b8060005b8581101561b006578484038952815161afe7858261af82565b945061aff28361af96565b925060208a0199505060018101905061afce565b50829750879550505050505092915050565b60008115159050919050565b61b02d8161b018565b82525050565b600060a082019050818103600083015261b04d818861aed3565b9050818103602083015261b061818761aed3565b9050818103604083015261b075818661afa3565b9050818103606083015261b089818561aed3565b905061b098608083018461b024565b9695505050505050565b600061b0b561b0b08461ac87565b61a900565b90508281526020810184848401111561b0d15761b0d061a992565b5b61b0dc84828561aea0565b509392505050565b600082601f83011261b0f95761b0f861a88a565b5b815161b10984826020860161b0a2565b91505092915050565b60006020828403121561b1285761b12761a880565b5b600082015167ffffffffffffffff81111561b1465761b14561a885565b5b61b1528482850161b0e4565b91505092915050565b600081905092915050565b50565b600061b17660008361b15b565b915061b1818261b166565b600082019050919050565b600061b1978261b169565b9150819050919050565b600061b1ac8261ae84565b61b1b6818561b15b565b935061b1c681856020860161aea0565b80840191505092915050565b600061b1de828461b1a1565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061b23057607f821691505b6020821081141561b2445761b24361b1e9565b5b50919050565b60008190508160005260206000209050919050565b6000815461b26c8161b218565b61b276818661b15b565b9450600182166000811461b291576001811461b2a25761b2d5565b60ff1983168652818601935061b2d5565b61b2ab8561b24a565b60005b8381101561b2cd5781548189015260018201915060208101905061b2ae565b838801955050505b50505092915050565b600061b2ea828461b25f565b915081905092915050565b7f546f6b656e206e6f7420737570706f72746564206f72206e6f7420666f756e64600082015250565b600061b32b60208361ae8f565b915061b3368261b2f5565b602082019050919050565b6000602082019050818103600083015261b35a8161b31e565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061b3a58261b361565b915061b3b08361b361565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561b3e95761b3e861b36b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061b42e8261b361565b915061b4398361b361565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561b46e5761b46d61b36b565b5b828201905092915050565b600061b4848261a956565b915063ffffffff82141561b49b5761b49a61b36b565b5b600182019050919050565b600061b4b18261b361565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561b4e45761b4e361b36b565b5b600182019050919050565b600061b4fa8261b361565b915061b5058361b361565b92508282101561b5185761b51761b36b565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b600185111561b57a5780860481111561b5565761b55561b36b565b5b600185161561b5655780820291505b808102905061b5738561b523565b945061b53a565b94509492505050565b60008261b593576001905061b64f565b8161b5a1576000905061b64f565b816001811461b5b7576002811461b5c15761b5f0565b600191505061b64f565b60ff84111561b5d35761b5d261b36b565b5b8360020a91508482111561b5ea5761b5e961b36b565b5b5061b64f565b5060208310610133831016604e8410600b841016171561b6255782820a90508381111561b6205761b61f61b36b565b5b61b64f565b61b632848484600161b530565b9250905081840481111561b6495761b64861b36b565b5b81810290505b9392505050565b600060ff82169050919050565b600061b66e8261b361565b915061b6798361b656565b925061b6a67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461b583565b905092915050565b600061b6b98261a956565b915061b6c48361a956565b92508282101561b6d75761b6d661b36b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061b71c8261b361565b915061b7278361b361565b92508261b7375761b73661b6e2565b5b828204905092915050565b600061b74e828561b1a1565b915061b75a828461b1a1565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061b79c60018361b15b565b915061b7a78261b766565b600182019050919050565b600061b7be828461b1a1565b915061b7c98261b78f565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061b80a60018361b15b565b915061b8158261b7d4565b600182019050919050565b600061b82c828461b1a1565b915061b8378261b7fd565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061b87860018361b15b565b915061b8838261b842565b600182019050919050565b600061b89a828461b1a1565b915061b8a58261b86b565b915081905092915050565b61b8b98161a956565b82525050565b600081519050919050565b600082825260208201905092915050565b600061b8e68261b8bf565b61b8f0818561b8ca565b935061b90081856020860161aea0565b61b9098161a88f565b840191505092915050565b600060408201905061b929600083018561b8b0565b818103602083015261b93b818461b8db565b90509392505050565b7f3f7469636b3d0000000000000000000000000000000000000000000000000000600082015250565b600061b97a60068361b15b565b915061b9858261b944565b600682019050919050565b7f26616464726573733d0000000000000000000000000000000000000000000000600082015250565b600061b9c660098361b15b565b915061b9d18261b990565b600982019050919050565b600061b9e8828661b1a1565b915061b9f38261b96d565b915061b9ff828561b1a1565b915061ba0a8261b9b9565b915061ba16828461b1a1565b9150819050949350505050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a2022657460008201527f685f67657442616c616e6365222c20226964223a20312c2022706172616d732260208201527f3a205b2200000000000000000000000000000000000000000000000000000000604082015250565b600061baa560448361b15b565b915061bab08261ba23565b604482019050919050565b7f222c20226c6174657374225d7d00000000000000000000000000000000000000600082015250565b600061baf1600d8361b15b565b915061bafc8261babb565b600d82019050919050565b600061bb128261ba98565b915061bb1e828461b1a1565b915061bb298261bae4565b915081905092915050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a20226e7260008201527f5f676574546f6b656e42616c616e63653230222c20226964223a20312c20227060208201527f6172616d73223a205b2200000000000000000000000000000000000000000000604082015250565b600061bbb6604a8361b15b565b915061bbc18261bb34565b604a82019050919050565b7f222c220000000000000000000000000000000000000000000000000000000000600082015250565b600061bc0260038361b15b565b915061bc0d8261bbcc565b600382019050919050565b600061bc238261bba9565b915061bc2f828561b1a1565b915061bc3a8261bbf5565b915061bc46828461b1a1565b915061bc518261bae4565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f7b22737263223a22000000000000000000000000000000000000000000000000600082015250565b600061bcc260088361b15b565b915061bccd8261bc8c565b600882019050919050565b7f222c226f70223a22000000000000000000000000000000000000000000000000600082015250565b600061bd0e60088361b15b565b915061bd198261bcd8565b600882019050919050565b7f222c22647374223a220000000000000000000000000000000000000000000000600082015250565b600061bd5a60098361b15b565b915061bd658261bd24565b600982019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061bda660028361b15b565b915061bdb18261bd70565b600282019050919050565b600061bdc78261bcb5565b915061bdd3828661b1a1565b915061bdde8261bd01565b915061bdea828561b1a1565b915061bdf58261bd4d565b915061be01828461b1a1565b915061be0c8261bd99565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000604083016000830151848203600086015261be62828261af49565b9150506020830151848203602086015261be7c828261af49565b9150508091505092915050565b600061be95838361be45565b905092915050565b6000602082019050919050565b600061beb58261be19565b61bebf818561be24565b93508360208202850161bed18561be35565b8060005b8581101561bf0d578484038952815161beee858261be89565b945061bef98361be9d565b925060208a0199505060018101905061bed5565b50829750879550505050505092915050565b6000606082019050818103600083015261bf39818661aed3565b9050818103602083015261bf4d818561aed3565b9050818103604083015261bf61818461beaa565b9050949350505050565b61bf748161b656565b82525050565b6000604082019050818103600083015261bf94818561aed3565b905061bfa3602083018461bf6b565b9392505050565b6000608082019050818103600083015261bfc4818761aed3565b9050818103602083015261bfd8818661aed3565b9050818103604083015261bfec818561aed3565b9050818103606083015261c000818461beaa565b905095945050505050565b6000602082019050818103600083015261c025818461aed3565b905092915050565b7f556e737570706f72746564206f70657261746f72000000000000000000000000600082015250565b600061c06360148361ae8f565b915061c06e8261c02d565b602082019050919050565b6000602082019050818103600083015261c0928161c056565b905091905056fe30783531343931303737316166396361363536616638343064666638336538323634656366393836636130783161663366333239653862653135343037346438373639643166666134656530353862316462633330783932643663316533316531343532306536373661363837663061393337383862373136626566663530783861633736613531636339353064393832326436386238336665316164393762333263643538306430783063313062663866636237626635343132313837613539356162393761333630393136306235633630783662313735343734653839303934633434646139386239353465656465616334393532373164306630783430616633383237463339443045416342463441313638663844346565363763313231443131633930783035366664343039653164376131323462643730313734353964666561326633383762366435636430783761353863306265373262653231386234316336303862376665376335626236333037333663373130783261663564326164373637343131393164313564666537626636616339326434626439313263613330783345453232303045666233343030664162423941616346333132393763426444316434333544343730786465333064613339633436313034373938626235616133666538623965306531663334383136336630783736613739376135396261326331373732363839363937366237623337343762666431643232306630783030303030303030303030383564343738306237333131396236343461653565636432326233373630783065623361373035666335343732353033376363396530303862646564653639376636326633333530783064386365326139396262366533623764623538306564383438323430653461306639616531353330786638613062663963663534626239326631373337346439653961333231653661313131613531626430786363343237323463363638336237653537333334633465383536663463393936356564363832626430783935616436316230613135306437393231396463663634653165366363303166306236346334636530784345376465363436653732303861344566313132636236656435303338464136634336623132653330783465336662643536636435366333653732633134303365313033623435646239646135623964326230783462383238356142343333443866363943423438643541643632623431356564316132323165346630783232363066616335653535343261373733616134346662636665646637633139336263326335393930783364363534356230383639336461653038376539353763623131383065653338623965336332356530786465313663653630383034613838316539663863346562623338323436343665646563643437386430786266353134306132323537383136386664353632646363663233356535643433613032636539623130783866463739356136463444393745373838374337396265413739616261356363373634343461446630783844393833636239333838456143373761663034373466413434314334383135353030436237424230783538326438373261316230393466633438663564653331643362373366326439626534376465663168747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6c6974656e7472792f76632d6a736f6e736368656d612f6d61696e2f646973742f736368656d61732f32352d746f6b656e2d686f6c64696e672d616d6f756e742f312d312d302e6a736f6e30783532636530373162643962316334623030613062393264323938633531323437386361643637653830786235393439306162303961306635323663633733303538323261633635663261623132663937323330783735653864646235313862623735376234323832636435623833626237306434313031643132666230786130623836393931633632313862333663316431396434613265396562306365333630366562343830786238633737343832653435663166343464653137343566353263373434323663363331626464353230786461633137663935386432656535323361323230363230363939343539376331336438333165633730786130623733653166663062383039313461623666653034343465363538343863346333343435306230786330306539346362363632633335323032383265366635373137323134303034613766323638383830783530333237633663356131346463616465373037616261643265323765623531376466383761623530783537306135643236663737363565636237313263303932346534646535343562383966643433646630783037646138316539613638346162383766616437323036623362633864303836366634386363376330786635376537653763323339373863336361656333633335343865336436313563333436653739666630783231373065643038383061633961373535666432396232363838393536626439353966393333663830786666323038313737363563623766373364346264653265363665303637653538643131303935633230783535643339383332366639393035396666373735343835323436393939303237623331393739353530783264666638386135363736373232336135353239656135393630646137613366356637363634303630783532383837333864663161656230383934373133646539303365316430633030316565623736343430786339343465393063363462326330373636326132393262653632343462646630356364613434613730783764316166613762373138666238393364623330613361626330636663363038616163666562623030786431373437393939376633346464393135366465656638663935613532643831643236356265396354686520616d6f756e74206f66206120706172746963756c617220746f6b656e20796f752061726520686f6c64696e67307862613762393933366139363566616332336262376138313930333634666136303632326233636666307831663938343061383564356166356266316431373632663932356264616464633432303166393834307862613261653432346439363063323632343764643663333265646337306232393563373434633433a2646970667358221220d6f6f2e382952b2dc3eeaa362b5f98a780a2659fb816a40251e4704a39e2b56a64736f6c634300080b0033307835313439313037373161663963613635366166383430646666383365383236346563663938366361307831616633663332396538626531353430373464383736396431666661346565303538623164626333307839326436633165333165313435323065363736613638376630613933373838623731366265666635307838616337366135316363393530643938323264363862383366653161643937623332636435383064307830633130626638666362376266353431323138376135393561623937613336303931363062356336307836623137353437346538393039346334346461393862393534656564656163343935323731643066307834306166333832374633394430454163424634413136386638443465653637633132314431316339307830353666643430396531643761313234626437303137343539646665613266333837623664356364307837613538633062653732626532313862343163363038623766653763356262363330373336633731307832616635643261643736373431313931643135646665376266366163393264346264393132636133307833454532323030456662333430306641624239416163463331323937634264443164343335443437307864653330646133396334363130343739386262356161336665386239653065316633343831363366307837366137393761353962613263313737323638393639373662376233373437626664316432323066307830303030303030303030303835643437383062373331313962363434616535656364323262333736307830656233613730356663353437323530333763633965303038626465646536393766363266333335307830643863653261393962623665336237646235383065643834383234306534613066396165313533687474703a2f2f6c6f63616c686f73743a31393533302f6e6f64657265616c5f6a736f6e7270632f307866386130626639636635346262393266313733373464396539613332316536613131316135316264307863633432373234633636383362376535373333346334653835366634633939363565643638326264307839356164363162306131353064373932313964636636346531653663633031663062363463346365307843453764653634366537323038613445663131326362366564353033384641366343366231326533307834653366626435366364353663336537326331343033653130336234356462396461356239643262307834623832383561423433334438663639434234386435416436326234313565643161323231653466307832323630666163356535353432613737336161343466626366656466376331393362633263353939307833643635343562303836393364616530383765393537636231313830656533386239653363323565307864653136636536303830346138383165396638633465626233383234363436656465636434373864307862663531343061323235373831363866643536326463636632333565356434336130326365396231687474703a2f2f6c6f63616c686f73743a31393532392f6170692f312f62726332302f62616c616e6365307838664637393561364634443937453738383743373962654137396162613563633736343434614466307838443938336362393338384561433737616630343734664134343143343831353530304362374242307835383264383732613162303934666334386635646533316433623733663264396265343764656631307835326365303731626439623163346230306130623932643239386335313234373863616436376538307862353934393061623039613066353236636337333035383232616336356632616231326639373233307837356538646462353138626237353762343238326364356238336262373064343130316431326662307861306238363939316336323138623336633164313964346132653965623063653336303665623438307862386337373438326534356631663434646531373435663532633734343236633633316264643532307864616331376639353864326565353233613232303632303639393435393763313364383331656337307861306237336531666630623830393134616236666530343434653635383438633463333434353062307863303065393463623636326333353230323832653666353731373231343030346137663236383838307835303332376336633561313464636164653730376162616432653237656235313764663837616235307835373061356432366637373635656362373132633039323465346465353435623839666434336466307830376461383165396136383461623837666164373230366233626338643038363666343863633763307866353765376537633233393738633363616563336333353438653364363135633334366537396666307832313730656430383830616339613735356664323962323638383935366264393539663933336638307866663230383137373635636237663733643462646532653636653036376535386431313039356332307835356433393833323666393930353966663737353438353234363939393032376233313937393535307832646666383861353637363732323361353532396561353936306461376133663566373636343036307835323838373338646631616562303839343731336465393033653164306330303165656237363434307863393434653930633634623263303736363261323932626536323434626466303563646134346137307837643161666137623731386662383933646233306133616263306366633630386161636665626230307864313734373939393766333464643931353664656566386639356135326438316432363562653963307862613762393933366139363566616332336262376138313930333634666136303632326233636666307831663938343061383564356166356266316431373632663932356264616464633432303166393834307862613261653432346439363063323632343764643663333265646337306232393563373434633433").unwrap(), + vec!["nodereal_api_key".to_string(),"geniidata_api_key".to_string()] ) ); - // token holding amount - // BNB - map.insert( - hash(4), - ( - hex::decode("60806040523480156200001157600080fd5b506040518060600160405280602b815260200162002f5a602b913960026000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906200006192919062000174565b506040518060600160405280602b815260200162002f5a602b913960026000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190620000b192919062000174565b506040518060600160405280602a815260200162002f85602a913960016000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906200010192919062000174565b506040518060400160405280600c81526020017f4e617469766520546f6b656e000000000000000000000000000000000000000081525060016000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906200016d92919062000174565b5062000289565b828054620001829062000253565b90600052602060002090601f016020900481019282620001a65760008555620001f2565b82601f10620001c157805160ff1916838001178555620001f2565b82800160010185558215620001f2579182015b82811115620001f1578251825591602001919060010190620001d4565b5b50905062000201919062000205565b5090565b5b808211156200022057600081600090555060010162000206565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026c57607f821691505b6020821081141562000283576200028262000224565b5b50919050565b612cc180620002996000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e256184614610030575b600080fd5b61004a60048036038101906100459190611c35565b610064565b60405161005b959493929190611e5c565b60405180910390f35b606080606080600080604051806060016040528060308152602001612c5c60309139905060006040518060400160405280601481526020017f546f6b656e20486f6c64696e6720416d6f756e7400000000000000000000000081525090506040518060a00160405280606d8152602001612bef606d9139600090805190602001906100f09291906115c2565b5060006100fd8a8a6101e1565b9050600080600061010d846102b9565b925092509250600061011f8383610429565b90506000808511806101315750600086115b905087878360008481805461014590611efa565b80601f016020809104026020016040519081016040528092919081815260200182805461017190611efa565b80156101be5780601f10610193576101008083540402835291602001916101be565b820191906000526020600020905b8154815290600101906020018083116101a157829003601f168201915b505050505091509c509c509c509c509c5050505050505050509295509295909350565b6000806000905060008451905060005b818110156102ad57600086828151811061020e5761020d611f2c565b5b602002602001015190506000816040015151905060005b818163ffffffff16101561029757600083604001518263ffffffff168151811061025257610251611f2c565b5b602002602001015190506102658161060d565b156102835761027584828b61063d565b876102809190611f94565b96505b50808061028f90611fea565b915050610225565b50505080806102a590612017565b9150506101f1565b50819250505092915050565b6000806000806102c7610867565b90506000600182516102d99190612060565b90506000806000600190505b84518163ffffffff161015610373576102fc610a8e565b600a61030891906121d4565b858263ffffffff168151811061032157610320611f2c565b5b6020026020010151610333919061221f565b60648a610340919061221f565b1015610360576001816103539190612279565b63ffffffff169350610373565b808061036b90611fea565b9150506102e5565b50600184516103829190612060565b8314156103ce5783838151811061039c5761039b611f2c565b5b602002602001015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610415565b8383815181106103e1576103e0611f2c565b5b60200260200101519150836001846103f99190611f94565b8151811061040a57610409611f2c565b5b602002602001015190505b828282965096509650505050509193909250565b606060006040518060400160405280600f81526020017f24686f6c64696e675f616d6f756e74000000000000000000000000000000000081525090506000604051806040016040528060008613610481576002610484565b60035b60ff1667ffffffffffffffff8111156104a05761049f6116f8565b5b6040519080825280602002602001820160405280156104d957816020015b6104c6611648565b8152602001906001900390816104be5790505b5081526020016001151581525090506105338160006040518060400160405280600681526020017f24746f6b656e0000000000000000000000000000000000000000000000000000815250600461052e610a97565b610ad4565b5061055781600184600261055260648b61054d91906122dc565b610b06565b610ad4565b5060008413156105865761058481600284600161057f60648a61057a91906122dc565b610b06565b610ad4565b505b6000600167ffffffffffffffff8111156105a3576105a26116f8565b5b6040519080825280602002602001820160405280156105d657816020015b60608152602001906001900390816105c15790505b5090506105e282610bde565b816000815181106105f6576105f5611f2c565b5b602002602001018190525080935050505092915050565b6000600863ffffffff168263ffffffff1614806106365750600763ffffffff168263ffffffff16145b9050919050565b6000806000610650858760200151610dae565b9150915081156108595760606000610666610e17565b90506000805b82518163ffffffff16101561084b57600360008a63ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff16610838576000600160008b63ffffffff1663ffffffff16815260200190815260200160002080546106d890611efa565b80601f016020809104026020016040519081016040528092919081815260200182805461070490611efa565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905060026000858463ffffffff168151811061077557610774611f2c565b5b602002602001015163ffffffff1663ffffffff168152602001908152602001600020896000815181106107ab576107aa611f2c565b5b60200260200101516040516020016107c49291906123dd565b60405160208183030381529060405294506000806107e387848a610ece565b9150915081156107fc5780856107f99190611f94565b94505b6001600360008e63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505b808061084390611fea565b91505061066c565b508095505050505050610860565b6000925050505b9392505050565b60606000600a67ffffffffffffffff811115610886576108856116f8565b5b6040519080825280602002602001820160405280156108b45781602001602082028036833780820191505090505b509050606460006108c5919061221f565b816000815181106108d9576108d8611f2c565b5b602002602001018181525050606460016108f3919061221f565b8160018151811061090757610906611f2c565b5b60200260200101818152505060646032610921919061221f565b8160028151811061093557610934611f2c565b5b60200260200101818152505060648061094e919061221f565b8160038151811061096257610961611f2c565b5b602002602001018181525050606460c861097c919061221f565b816004815181106109905761098f611f2c565b5b60200260200101818152505060646101f46109ab919061221f565b816005815181106109bf576109be611f2c565b5b60200260200101818152505060646103206109da919061221f565b816006815181106109ee576109ed611f2c565b5b60200260200101818152505060646104b0610a09919061221f565b81600781518110610a1d57610a1c611f2c565b5b6020026020010181815250506064610640610a38919061221f565b81600881518110610a4c57610a4b611f2c565b5b6020026020010181815250506064610bb8610a67919061221f565b81600981518110610a7b57610a7a611f2c565b5b6020026020010181815250508091505090565b60006012905090565b60606040518060400160405280600381526020017f626e620000000000000000000000000000000000000000000000000000000000815250905090565b610adc61167b565b610ae9868686868661103b565b600186602001901515908115158152505085905095945050505050565b606060006001610b1584611091565b01905060008167ffffffffffffffff811115610b3457610b336116f8565b5b6040519080825280601f01601f191660200182016040528015610b665781602001600182028036833780820191505090505b509050600082602001820190505b600115610bd3578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610bbd57610bbc6122ad565b5b0494506000851415610bce57610bd3565b610b74565b819350505050919050565b606060006040518060400160405280600181526020017f7b00000000000000000000000000000000000000000000000000000000000000815250905060008360000151511115610d8357808360200151610c6d576040518060400160405280600681526020017f226f72223a5b0000000000000000000000000000000000000000000000000000815250610ca4565b6040518060400160405280600781526020017f22616e64223a5b000000000000000000000000000000000000000000000000008152505b604051602001610cb5929190612401565b604051602081830303815290604052905060005b836000015151811015610d5f576000811115610d025781604051602001610cf09190612471565b60405160208183030381529060405291505b81610d2a85600001518381518110610d1d57610d1c611f2c565b5b60200260200101516111e4565b604051602001610d3b929190612401565b60405160208183030381529060405291508080610d5790612017565b915050610cc9565b5080604051602001610d7191906124df565b60405160208183030381529060405290505b80604051602001610d94919061254d565b604051602081830303815290604052905080915050919050565b6000606060008484604051602001610dc79291906125d3565b6040516020818303038152906040529050600081519050604051611000818360208601600061041c600019f1610dfc57600080fd5b80945060408101935061100081016040525050509250929050565b60606000600267ffffffffffffffff811115610e3657610e356116f8565b5b604051908082528060200260200182016040528015610e645781602001602082028036833780820191505090505b509050600781600081518110610e7d57610e7c611f2c565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110610ead57610eac611f2c565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60008060008067ffffffffffffffff811115610eed57610eec6116f8565b5b604051908082528060200260200182016040528015610f2657816020015b610f13611697565b815260200190600190039081610f0b5790505b50905060607f9b01d545332e4cf8fd9fdc967124906a604e53cb830a054b30685e6e2723ae8b86805190602001201415610f815784604051602001610f6b91906126e7565b6040516020818303038152906040529050610fc3565b602a86511415610fb4578585604051602001610f9e9291906127f8565b6040516020818303038152906040529050610fc2565b600080935093505050611033565b5b600080611007896040518060400160405280600781526020017f2f726573756c74000000000000000000000000000000000000000000000000008152508587611225565b9150915081156110275761101a816112a1565b9550955050505050611033565b60008095509550505050505b935093915050565b604051806060016040528084815260200183600581111561105f5761105e61283d565b5b8152602001828152508560000151858151811061107f5761107e611f2c565b5b60200260200101819052505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106110ef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816110e5576110e46122ad565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061112c576d04ee2d6d415b85acef81000000008381611122576111216122ad565b5b0492506020810190505b662386f26fc10000831061115b57662386f26fc100008381611151576111506122ad565b5b0492506010810190505b6305f5e1008310611184576305f5e100838161117a576111796122ad565b5b0492506008810190505b61271083106111a957612710838161119f5761119e6122ad565b5b0492506004810190505b606483106111cc57606483816111c2576111c16122ad565b5b0492506002810190505b600a83106111db576001810190505b80915050919050565b606081600001516111f88360200151611305565b836040015160405160200161120f9392919061299c565b6040516020818303038152906040529050919050565b60006060600060606000888888886040516020016112469493929190612aff565b604051602081830303815290604052905060008151905060405161100081836020860160006103ed600019f161127b57600080fd5b805194506040810193506110008101604052508383955095505050505094509492505050565b6000806000836040516020016112b79190612b60565b60405160208183030381529060405290506000815190506040516082818360208601600061041d600019f16112eb57600080fd5b805194506020810151935060828101604052505050915091565b60606004600581111561131b5761131a61283d565b5b82600581111561132e5761132d61283d565b5b1415611371576040518060400160405280600281526020017f3d3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b600060058111156113855761138461283d565b5b8260058111156113985761139761283d565b5b14156113db576040518060400160405280600181526020017f3e0000000000000000000000000000000000000000000000000000000000000081525090506115bd565b600160058111156113ef576113ee61283d565b5b8260058111156114025761140161283d565b5b1415611445576040518060400160405280600181526020017f3c0000000000000000000000000000000000000000000000000000000000000081525090506115bd565b600260058111156114595761145861283d565b5b82600581111561146c5761146b61283d565b5b14156114af576040518060400160405280600281526020017f3e3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b600360058111156114c3576114c261283d565b5b8260058111156114d6576114d561283d565b5b1415611519576040518060400160405280600281526020017f3c3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b60058081111561152c5761152b61283d565b5b82600581111561153f5761153e61283d565b5b1415611582576040518060400160405280600281526020017f213d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490612bce565b60405180910390fd5b919050565b8280546115ce90611efa565b90600052602060002090601f0160209004810192826115f05760008555611637565b82601f1061160957805160ff1916838001178555611637565b82800160010185558215611637579182015b8281111561163657825182559160200191906001019061161b565b5b50905061164491906116b1565b5090565b6040518060600160405280606081526020016000600581111561166e5761166d61283d565b5b8152602001606081525090565b6040518060400160405280606081526020016000151581525090565b604051806040016040528060608152602001606081525090565b5b808211156116ca5760008160009055506001016116b2565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611730826116e7565b810181811067ffffffffffffffff8211171561174f5761174e6116f8565b5b80604052505050565b60006117626116ce565b905061176e8282611727565b919050565b600067ffffffffffffffff82111561178e5761178d6116f8565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b6117c7816117ae565b81146117d257600080fd5b50565b6000813590506117e4816117be565b92915050565b600080fd5b600067ffffffffffffffff82111561180a576118096116f8565b5b611813826116e7565b9050602081019050919050565b82818337600083830152505050565b600061184261183d846117ef565b611758565b90508281526020810184848401111561185e5761185d6117ea565b5b611869848285611820565b509392505050565b600082601f830112611886576118856116e2565b5b813561189684826020860161182f565b91505092915050565b600067ffffffffffffffff8211156118ba576118b96116f8565b5b602082029050602081019050919050565b60006118de6118d98461189f565b611758565b905080838252602082019050602084028301858111156119015761190061179f565b5b835b8181101561192a578061191688826117d5565b845260208401935050602081019050611903565b5050509392505050565b600082601f830112611949576119486116e2565b5b81356119598482602086016118cb565b91505092915050565b600060608284031215611978576119776117a4565b5b6119826060611758565b90506000611992848285016117d5565b600083015250602082013567ffffffffffffffff8111156119b6576119b56117a9565b5b6119c284828501611871565b602083015250604082013567ffffffffffffffff8111156119e6576119e56117a9565b5b6119f284828501611934565b60408301525092915050565b6000611a11611a0c84611773565b611758565b90508083825260208201905060208402830185811115611a3457611a3361179f565b5b835b81811015611a7b57803567ffffffffffffffff811115611a5957611a586116e2565b5b808601611a668982611962565b85526020850194505050602081019050611a36565b5050509392505050565b600082601f830112611a9a57611a996116e2565b5b8135611aaa8482602086016119fe565b91505092915050565b600067ffffffffffffffff821115611ace57611acd6116f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611afa57611af96116f8565b5b611b03826116e7565b9050602081019050919050565b6000611b23611b1e84611adf565b611758565b905082815260208101848484011115611b3f57611b3e6117ea565b5b611b4a848285611820565b509392505050565b600082601f830112611b6757611b666116e2565b5b8135611b77848260208601611b10565b91505092915050565b6000611b93611b8e84611ab3565b611758565b90508083825260208201905060208402830185811115611bb657611bb561179f565b5b835b81811015611bfd57803567ffffffffffffffff811115611bdb57611bda6116e2565b5b808601611be88982611b52565b85526020850194505050602081019050611bb8565b5050509392505050565b600082601f830112611c1c57611c1b6116e2565b5b8135611c2c848260208601611b80565b91505092915050565b60008060408385031215611c4c57611c4b6116d8565b5b600083013567ffffffffffffffff811115611c6a57611c696116dd565b5b611c7685828601611a85565b925050602083013567ffffffffffffffff811115611c9757611c966116dd565b5b611ca385828601611c07565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ce7578082015181840152602081019050611ccc565b83811115611cf6576000848401525b50505050565b6000611d0782611cad565b611d118185611cb8565b9350611d21818560208601611cc9565b611d2a816116e7565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000611d7d82611cad565b611d878185611d61565b9350611d97818560208601611cc9565b611da0816116e7565b840191505092915050565b6000611db78383611d72565b905092915050565b6000602082019050919050565b6000611dd782611d35565b611de18185611d40565b935083602082028501611df385611d51565b8060005b85811015611e2f5784840389528151611e108582611dab565b9450611e1b83611dbf565b925060208a01995050600181019050611df7565b50829750879550505050505092915050565b60008115159050919050565b611e5681611e41565b82525050565b600060a0820190508181036000830152611e768188611cfc565b90508181036020830152611e8a8187611cfc565b90508181036040830152611e9e8186611dcc565b90508181036060830152611eb28185611cfc565b9050611ec16080830184611e4d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1257607f821691505b60208210811415611f2657611f25611ecb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9f82611f5b565b9150611faa83611f5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611fdf57611fde611f65565b5b828201905092915050565b6000611ff5826117ae565b915063ffffffff82141561200c5761200b611f65565b5b600182019050919050565b600061202282611f5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561205557612054611f65565b5b600182019050919050565b600061206b82611f5b565b915061207683611f5b565b92508282101561208957612088611f65565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b60018511156120eb578086048111156120c7576120c6611f65565b5b60018516156120d65780820291505b80810290506120e485612094565b94506120ab565b94509492505050565b60008261210457600190506121c0565b8161211257600090506121c0565b8160018114612128576002811461213257612161565b60019150506121c0565b60ff84111561214457612143611f65565b5b8360020a91508482111561215b5761215a611f65565b5b506121c0565b5060208310610133831016604e8410600b84101617156121965782820a90508381111561219157612190611f65565b5b6121c0565b6121a384848460016120a1565b925090508184048111156121ba576121b9611f65565b5b81810290505b9392505050565b600060ff82169050919050565b60006121df82611f5b565b91506121ea836121c7565b92506122177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120f4565b905092915050565b600061222a82611f5b565b915061223583611f5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561226e5761226d611f65565b5b828202905092915050565b6000612284826117ae565b915061228f836117ae565b9250828210156122a2576122a1611f65565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e782611f5b565b91506122f283611f5b565b925082612302576123016122ad565b5b828204905092915050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461233a81611efa565b612344818661230d565b9450600182166000811461235f5760018114612370576123a3565b60ff198316865281860193506123a3565b61237985612318565b60005b8381101561239b5781548189015260018201915060208101905061237c565b838801955050505b50505092915050565b60006123b782611cad565b6123c1818561230d565b93506123d1818560208601611cc9565b80840191505092915050565b60006123e9828561232d565b91506123f582846123ac565b91508190509392505050565b600061240d82856123ac565b915061241982846123ac565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061245b60018361230d565b915061246682612425565b600182019050919050565b600061247d82846123ac565b91506124888261244e565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006124c960018361230d565b91506124d482612493565b600182019050919050565b60006124eb82846123ac565b91506124f6826124bc565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061253760018361230d565b915061254282612501565b600182019050919050565b600061255982846123ac565b91506125648261252a565b915081905092915050565b612578816117ae565b82525050565b600081519050919050565b600082825260208201905092915050565b60006125a58261257e565b6125af8185612589565b93506125bf818560208601611cc9565b6125c8816116e7565b840191505092915050565b60006040820190506125e8600083018561256f565b81810360208301526125fa818461259a565b90509392505050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a2022657460008201527f685f67657442616c616e6365222c20226964223a20312c2022706172616d732260208201527f3a205b2200000000000000000000000000000000000000000000000000000000604082015250565b600061268560448361230d565b915061269082612603565b604482019050919050565b7f222c20226c6174657374225d7d00000000000000000000000000000000000000600082015250565b60006126d1600d8361230d565b91506126dc8261269b565b600d82019050919050565b60006126f282612678565b91506126fe82846123ac565b9150612709826126c4565b915081905092915050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a20226e7260008201527f5f676574546f6b656e42616c616e63653230222c20226964223a20312c20227060208201527f6172616d73223a205b2200000000000000000000000000000000000000000000604082015250565b6000612796604a8361230d565b91506127a182612714565b604a82019050919050565b7f222c220000000000000000000000000000000000000000000000000000000000600082015250565b60006127e260038361230d565b91506127ed826127ac565b600382019050919050565b600061280382612789565b915061280f82856123ac565b915061281a826127d5565b915061282682846123ac565b9150612831826126c4565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f7b22737263223a22000000000000000000000000000000000000000000000000600082015250565b60006128a260088361230d565b91506128ad8261286c565b600882019050919050565b7f222c226f70223a22000000000000000000000000000000000000000000000000600082015250565b60006128ee60088361230d565b91506128f9826128b8565b600882019050919050565b7f222c22647374223a220000000000000000000000000000000000000000000000600082015250565b600061293a60098361230d565b915061294582612904565b600982019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061298660028361230d565b915061299182612950565b600282019050919050565b60006129a782612895565b91506129b382866123ac565b91506129be826128e1565b91506129ca82856123ac565b91506129d58261292d565b91506129e182846123ac565b91506129ec82612979565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006040830160008301518482036000860152612a428282611d72565b91505060208301518482036020860152612a5c8282611d72565b9150508091505092915050565b6000612a758383612a25565b905092915050565b6000602082019050919050565b6000612a95826129f9565b612a9f8185612a04565b935083602082028501612ab185612a15565b8060005b85811015612aed5784840389528151612ace8582612a69565b9450612ad983612a7d565b925060208a01995050600181019050612ab5565b50829750879550505050505092915050565b60006080820190508181036000830152612b198187611cfc565b90508181036020830152612b2d8186611cfc565b90508181036040830152612b418185611cfc565b90508181036060830152612b558184612a8a565b905095945050505050565b60006020820190508181036000830152612b7a8184611cfc565b905092915050565b7f556e737570706f72746564206f70657261746f72000000000000000000000000600082015250565b6000612bb8601483611cb8565b9150612bc382612b82565b602082019050919050565b60006020820190508181036000830152612be781612bab565b905091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6c6974656e7472792f76632d6a736f6e736368656d612f6d61696e2f646973742f736368656d61732f32352d746f6b656e2d686f6c64696e672d616d6f756e742f312d312d302e6a736f6e54686520616d6f756e74206f66206120706172746963756c617220746f6b656e20796f752061726520686f6c64696e67a2646970667358221220360906aaf3d7bb2a0044f0931b6789da5cc7fafb747508186528f82fe568e9e664736f6c634300080b0033687474703a2f2f6c6f63616c686f73743a31393533302f6e6f64657265616c5f6a736f6e7270632f76312f307862386337373438326534356631663434646531373435663532633734343236633633316264643532").unwrap(), - vec!["nodereal_api_key".to_string()] - ) - ); - - // token holding amount - // Trx - map.insert( - hash(5), - ( - hex::decode("60806040523480156200001157600080fd5b506040518060600160405280602b815260200162002f3e602b913960026000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906200006192919062000158565b506040518060600160405280602b815260200162002f3e602b913960026000600763ffffffff1663ffffffff1681526020019081526020016000209080519060200190620000b192919062000158565b506040518060600160405280602a815260200162002f93602a913960016000600763ffffffff1663ffffffff16815260200190815260200160002090805190602001906200010192919062000158565b506040518060600160405280602a815260200162002f69602a913960016000600863ffffffff1663ffffffff16815260200190815260200160002090805190602001906200015192919062000158565b506200026d565b828054620001669062000237565b90600052602060002090601f0160209004810192826200018a5760008555620001d6565b82601f10620001a557805160ff1916838001178555620001d6565b82800160010185558215620001d6579182015b82811115620001d5578251825591602001919060010190620001b8565b5b509050620001e59190620001e9565b5090565b5b8082111562000204576000816000905550600101620001ea565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200025057607f821691505b6020821081141562000267576200026662000208565b5b50919050565b612cc1806200027d6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e256184614610030575b600080fd5b61004a60048036038101906100459190611c35565b610064565b60405161005b959493929190611e5c565b60405180910390f35b606080606080600080604051806060016040528060308152602001612c5c60309139905060006040518060400160405280601481526020017f546f6b656e20486f6c64696e6720416d6f756e7400000000000000000000000081525090506040518060a00160405280606d8152602001612bef606d9139600090805190602001906100f09291906115c2565b5060006100fd8a8a6101e1565b9050600080600061010d846102b9565b925092509250600061011f8383610429565b90506000808511806101315750600086115b905087878360008481805461014590611efa565b80601f016020809104026020016040519081016040528092919081815260200182805461017190611efa565b80156101be5780601f10610193576101008083540402835291602001916101be565b820191906000526020600020905b8154815290600101906020018083116101a157829003601f168201915b505050505091509c509c509c509c509c5050505050505050509295509295909350565b6000806000905060008451905060005b818110156102ad57600086828151811061020e5761020d611f2c565b5b602002602001015190506000816040015151905060005b818163ffffffff16101561029757600083604001518263ffffffff168151811061025257610251611f2c565b5b602002602001015190506102658161060d565b156102835761027584828b61063d565b876102809190611f94565b96505b50808061028f90611fea565b915050610225565b50505080806102a590612017565b9150506101f1565b50819250505092915050565b6000806000806102c7610867565b90506000600182516102d99190612060565b90506000806000600190505b84518163ffffffff161015610373576102fc610a8e565b600a61030891906121d4565b858263ffffffff168151811061032157610320611f2c565b5b6020026020010151610333919061221f565b60648a610340919061221f565b1015610360576001816103539190612279565b63ffffffff169350610373565b808061036b90611fea565b9150506102e5565b50600184516103829190612060565b8314156103ce5783838151811061039c5761039b611f2c565b5b602002602001015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610415565b8383815181106103e1576103e0611f2c565b5b60200260200101519150836001846103f99190611f94565b8151811061040a57610409611f2c565b5b602002602001015190505b828282965096509650505050509193909250565b606060006040518060400160405280600f81526020017f24686f6c64696e675f616d6f756e74000000000000000000000000000000000081525090506000604051806040016040528060008613610481576002610484565b60035b60ff1667ffffffffffffffff8111156104a05761049f6116f8565b5b6040519080825280602002602001820160405280156104d957816020015b6104c6611648565b8152602001906001900390816104be5790505b5081526020016001151581525090506105338160006040518060400160405280600681526020017f24746f6b656e0000000000000000000000000000000000000000000000000000815250600461052e610a97565b610ad4565b5061055781600184600261055260648b61054d91906122dc565b610b06565b610ad4565b5060008413156105865761058481600284600161057f60648a61057a91906122dc565b610b06565b610ad4565b505b6000600167ffffffffffffffff8111156105a3576105a26116f8565b5b6040519080825280602002602001820160405280156105d657816020015b60608152602001906001900390816105c15790505b5090506105e282610bde565b816000815181106105f6576105f5611f2c565b5b602002602001018190525080935050505092915050565b6000600863ffffffff168263ffffffff1614806106365750600763ffffffff168263ffffffff16145b9050919050565b6000806000610650858760200151610dae565b9150915081156108595760606000610666610e17565b90506000805b82518163ffffffff16101561084b57600360008a63ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff16610838576000600160008b63ffffffff1663ffffffff16815260200190815260200160002080546106d890611efa565b80601f016020809104026020016040519081016040528092919081815260200182805461070490611efa565b80156107515780601f1061072657610100808354040283529160200191610751565b820191906000526020600020905b81548152906001019060200180831161073457829003601f168201915b5050505050905060026000858463ffffffff168151811061077557610774611f2c565b5b602002602001015163ffffffff1663ffffffff168152602001908152602001600020896000815181106107ab576107aa611f2c565b5b60200260200101516040516020016107c49291906123dd565b60405160208183030381529060405294506000806107e387848a610ece565b9150915081156107fc5780856107f99190611f94565b94505b6001600360008e63ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505b808061084390611fea565b91505061066c565b508095505050505050610860565b6000925050505b9392505050565b60606000600a67ffffffffffffffff811115610886576108856116f8565b5b6040519080825280602002602001820160405280156108b45781602001602082028036833780820191505090505b509050606460006108c5919061221f565b816000815181106108d9576108d8611f2c565b5b602002602001018181525050606460016108f3919061221f565b8160018151811061090757610906611f2c565b5b60200260200101818152505060646032610921919061221f565b8160028151811061093557610934611f2c565b5b60200260200101818152505060648061094e919061221f565b8160038151811061096257610961611f2c565b5b602002602001018181525050606460c861097c919061221f565b816004815181106109905761098f611f2c565b5b60200260200101818152505060646101f46109ab919061221f565b816005815181106109bf576109be611f2c565b5b60200260200101818152505060646103206109da919061221f565b816006815181106109ee576109ed611f2c565b5b60200260200101818152505060646104b0610a09919061221f565b81600781518110610a1d57610a1c611f2c565b5b6020026020010181815250506064610640610a38919061221f565b81600881518110610a4c57610a4b611f2c565b5b6020026020010181815250506064610bb8610a67919061221f565b81600981518110610a7b57610a7a611f2c565b5b6020026020010181815250508091505090565b60006012905090565b60606040518060400160405280600381526020017f7472780000000000000000000000000000000000000000000000000000000000815250905090565b610adc61167b565b610ae9868686868661103b565b600186602001901515908115158152505085905095945050505050565b606060006001610b1584611091565b01905060008167ffffffffffffffff811115610b3457610b336116f8565b5b6040519080825280601f01601f191660200182016040528015610b665781602001600182028036833780820191505090505b509050600082602001820190505b600115610bd3578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610bbd57610bbc6122ad565b5b0494506000851415610bce57610bd3565b610b74565b819350505050919050565b606060006040518060400160405280600181526020017f7b00000000000000000000000000000000000000000000000000000000000000815250905060008360000151511115610d8357808360200151610c6d576040518060400160405280600681526020017f226f72223a5b0000000000000000000000000000000000000000000000000000815250610ca4565b6040518060400160405280600781526020017f22616e64223a5b000000000000000000000000000000000000000000000000008152505b604051602001610cb5929190612401565b604051602081830303815290604052905060005b836000015151811015610d5f576000811115610d025781604051602001610cf09190612471565b60405160208183030381529060405291505b81610d2a85600001518381518110610d1d57610d1c611f2c565b5b60200260200101516111e4565b604051602001610d3b929190612401565b60405160208183030381529060405291508080610d5790612017565b915050610cc9565b5080604051602001610d7191906124df565b60405160208183030381529060405290505b80604051602001610d94919061254d565b604051602081830303815290604052905080915050919050565b6000606060008484604051602001610dc79291906125d3565b6040516020818303038152906040529050600081519050604051611000818360208601600061041c600019f1610dfc57600080fd5b80945060408101935061100081016040525050509250929050565b60606000600267ffffffffffffffff811115610e3657610e356116f8565b5b604051908082528060200260200182016040528015610e645781602001602082028036833780820191505090505b509050600781600081518110610e7d57610e7c611f2c565b5b602002602001019063ffffffff16908163ffffffff1681525050600881600181518110610ead57610eac611f2c565b5b602002602001019063ffffffff16908163ffffffff16815250508091505090565b60008060008067ffffffffffffffff811115610eed57610eec6116f8565b5b604051908082528060200260200182016040528015610f2657816020015b610f13611697565b815260200190600190039081610f0b5790505b50905060607f9b01d545332e4cf8fd9fdc967124906a604e53cb830a054b30685e6e2723ae8b86805190602001201415610f815784604051602001610f6b91906126e7565b6040516020818303038152906040529050610fc3565b602a86511415610fb4578585604051602001610f9e9291906127f8565b6040516020818303038152906040529050610fc2565b600080935093505050611033565b5b600080611007896040518060400160405280600781526020017f2f726573756c74000000000000000000000000000000000000000000000000008152508587611225565b9150915081156110275761101a816112a1565b9550955050505050611033565b60008095509550505050505b935093915050565b604051806060016040528084815260200183600581111561105f5761105e61283d565b5b8152602001828152508560000151858151811061107f5761107e611f2c565b5b60200260200101819052505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106110ef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816110e5576110e46122ad565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061112c576d04ee2d6d415b85acef81000000008381611122576111216122ad565b5b0492506020810190505b662386f26fc10000831061115b57662386f26fc100008381611151576111506122ad565b5b0492506010810190505b6305f5e1008310611184576305f5e100838161117a576111796122ad565b5b0492506008810190505b61271083106111a957612710838161119f5761119e6122ad565b5b0492506004810190505b606483106111cc57606483816111c2576111c16122ad565b5b0492506002810190505b600a83106111db576001810190505b80915050919050565b606081600001516111f88360200151611305565b836040015160405160200161120f9392919061299c565b6040516020818303038152906040529050919050565b60006060600060606000888888886040516020016112469493929190612aff565b604051602081830303815290604052905060008151905060405161100081836020860160006103ed600019f161127b57600080fd5b805194506040810193506110008101604052508383955095505050505094509492505050565b6000806000836040516020016112b79190612b60565b60405160208183030381529060405290506000815190506040516082818360208601600061041d600019f16112eb57600080fd5b805194506020810151935060828101604052505050915091565b60606004600581111561131b5761131a61283d565b5b82600581111561132e5761132d61283d565b5b1415611371576040518060400160405280600281526020017f3d3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b600060058111156113855761138461283d565b5b8260058111156113985761139761283d565b5b14156113db576040518060400160405280600181526020017f3e0000000000000000000000000000000000000000000000000000000000000081525090506115bd565b600160058111156113ef576113ee61283d565b5b8260058111156114025761140161283d565b5b1415611445576040518060400160405280600181526020017f3c0000000000000000000000000000000000000000000000000000000000000081525090506115bd565b600260058111156114595761145861283d565b5b82600581111561146c5761146b61283d565b5b14156114af576040518060400160405280600281526020017f3e3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b600360058111156114c3576114c261283d565b5b8260058111156114d6576114d561283d565b5b1415611519576040518060400160405280600281526020017f3c3d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b60058081111561152c5761152b61283d565b5b82600581111561153f5761153e61283d565b5b1415611582576040518060400160405280600281526020017f213d00000000000000000000000000000000000000000000000000000000000081525090506115bd565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490612bce565b60405180910390fd5b919050565b8280546115ce90611efa565b90600052602060002090601f0160209004810192826115f05760008555611637565b82601f1061160957805160ff1916838001178555611637565b82800160010185558215611637579182015b8281111561163657825182559160200191906001019061161b565b5b50905061164491906116b1565b5090565b6040518060600160405280606081526020016000600581111561166e5761166d61283d565b5b8152602001606081525090565b6040518060400160405280606081526020016000151581525090565b604051806040016040528060608152602001606081525090565b5b808211156116ca5760008160009055506001016116b2565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611730826116e7565b810181811067ffffffffffffffff8211171561174f5761174e6116f8565b5b80604052505050565b60006117626116ce565b905061176e8282611727565b919050565b600067ffffffffffffffff82111561178e5761178d6116f8565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600063ffffffff82169050919050565b6117c7816117ae565b81146117d257600080fd5b50565b6000813590506117e4816117be565b92915050565b600080fd5b600067ffffffffffffffff82111561180a576118096116f8565b5b611813826116e7565b9050602081019050919050565b82818337600083830152505050565b600061184261183d846117ef565b611758565b90508281526020810184848401111561185e5761185d6117ea565b5b611869848285611820565b509392505050565b600082601f830112611886576118856116e2565b5b813561189684826020860161182f565b91505092915050565b600067ffffffffffffffff8211156118ba576118b96116f8565b5b602082029050602081019050919050565b60006118de6118d98461189f565b611758565b905080838252602082019050602084028301858111156119015761190061179f565b5b835b8181101561192a578061191688826117d5565b845260208401935050602081019050611903565b5050509392505050565b600082601f830112611949576119486116e2565b5b81356119598482602086016118cb565b91505092915050565b600060608284031215611978576119776117a4565b5b6119826060611758565b90506000611992848285016117d5565b600083015250602082013567ffffffffffffffff8111156119b6576119b56117a9565b5b6119c284828501611871565b602083015250604082013567ffffffffffffffff8111156119e6576119e56117a9565b5b6119f284828501611934565b60408301525092915050565b6000611a11611a0c84611773565b611758565b90508083825260208201905060208402830185811115611a3457611a3361179f565b5b835b81811015611a7b57803567ffffffffffffffff811115611a5957611a586116e2565b5b808601611a668982611962565b85526020850194505050602081019050611a36565b5050509392505050565b600082601f830112611a9a57611a996116e2565b5b8135611aaa8482602086016119fe565b91505092915050565b600067ffffffffffffffff821115611ace57611acd6116f8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611afa57611af96116f8565b5b611b03826116e7565b9050602081019050919050565b6000611b23611b1e84611adf565b611758565b905082815260208101848484011115611b3f57611b3e6117ea565b5b611b4a848285611820565b509392505050565b600082601f830112611b6757611b666116e2565b5b8135611b77848260208601611b10565b91505092915050565b6000611b93611b8e84611ab3565b611758565b90508083825260208201905060208402830185811115611bb657611bb561179f565b5b835b81811015611bfd57803567ffffffffffffffff811115611bdb57611bda6116e2565b5b808601611be88982611b52565b85526020850194505050602081019050611bb8565b5050509392505050565b600082601f830112611c1c57611c1b6116e2565b5b8135611c2c848260208601611b80565b91505092915050565b60008060408385031215611c4c57611c4b6116d8565b5b600083013567ffffffffffffffff811115611c6a57611c696116dd565b5b611c7685828601611a85565b925050602083013567ffffffffffffffff811115611c9757611c966116dd565b5b611ca385828601611c07565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ce7578082015181840152602081019050611ccc565b83811115611cf6576000848401525b50505050565b6000611d0782611cad565b611d118185611cb8565b9350611d21818560208601611cc9565b611d2a816116e7565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000611d7d82611cad565b611d878185611d61565b9350611d97818560208601611cc9565b611da0816116e7565b840191505092915050565b6000611db78383611d72565b905092915050565b6000602082019050919050565b6000611dd782611d35565b611de18185611d40565b935083602082028501611df385611d51565b8060005b85811015611e2f5784840389528151611e108582611dab565b9450611e1b83611dbf565b925060208a01995050600181019050611df7565b50829750879550505050505092915050565b60008115159050919050565b611e5681611e41565b82525050565b600060a0820190508181036000830152611e768188611cfc565b90508181036020830152611e8a8187611cfc565b90508181036040830152611e9e8186611dcc565b90508181036060830152611eb28185611cfc565b9050611ec16080830184611e4d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f1257607f821691505b60208210811415611f2657611f25611ecb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f9f82611f5b565b9150611faa83611f5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611fdf57611fde611f65565b5b828201905092915050565b6000611ff5826117ae565b915063ffffffff82141561200c5761200b611f65565b5b600182019050919050565b600061202282611f5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561205557612054611f65565b5b600182019050919050565b600061206b82611f5b565b915061207683611f5b565b92508282101561208957612088611f65565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b60018511156120eb578086048111156120c7576120c6611f65565b5b60018516156120d65780820291505b80810290506120e485612094565b94506120ab565b94509492505050565b60008261210457600190506121c0565b8161211257600090506121c0565b8160018114612128576002811461213257612161565b60019150506121c0565b60ff84111561214457612143611f65565b5b8360020a91508482111561215b5761215a611f65565b5b506121c0565b5060208310610133831016604e8410600b84101617156121965782820a90508381111561219157612190611f65565b5b6121c0565b6121a384848460016120a1565b925090508184048111156121ba576121b9611f65565b5b81810290505b9392505050565b600060ff82169050919050565b60006121df82611f5b565b91506121ea836121c7565b92506122177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846120f4565b905092915050565b600061222a82611f5b565b915061223583611f5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561226e5761226d611f65565b5b828202905092915050565b6000612284826117ae565b915061228f836117ae565b9250828210156122a2576122a1611f65565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e782611f5b565b91506122f283611f5b565b925082612302576123016122ad565b5b828204905092915050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461233a81611efa565b612344818661230d565b9450600182166000811461235f5760018114612370576123a3565b60ff198316865281860193506123a3565b61237985612318565b60005b8381101561239b5781548189015260018201915060208101905061237c565b838801955050505b50505092915050565b60006123b782611cad565b6123c1818561230d565b93506123d1818560208601611cc9565b80840191505092915050565b60006123e9828561232d565b91506123f582846123ac565b91508190509392505050565b600061240d82856123ac565b915061241982846123ac565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061245b60018361230d565b915061246682612425565b600182019050919050565b600061247d82846123ac565b91506124888261244e565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006124c960018361230d565b91506124d482612493565b600182019050919050565b60006124eb82846123ac565b91506124f6826124bc565b915081905092915050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b600061253760018361230d565b915061254282612501565b600182019050919050565b600061255982846123ac565b91506125648261252a565b915081905092915050565b612578816117ae565b82525050565b600081519050919050565b600082825260208201905092915050565b60006125a58261257e565b6125af8185612589565b93506125bf818560208601611cc9565b6125c8816116e7565b840191505092915050565b60006040820190506125e8600083018561256f565b81810360208301526125fa818461259a565b90509392505050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a2022657460008201527f685f67657442616c616e6365222c20226964223a20312c2022706172616d732260208201527f3a205b2200000000000000000000000000000000000000000000000000000000604082015250565b600061268560448361230d565b915061269082612603565b604482019050919050565b7f222c20226c6174657374225d7d00000000000000000000000000000000000000600082015250565b60006126d1600d8361230d565b91506126dc8261269b565b600d82019050919050565b60006126f282612678565b91506126fe82846123ac565b9150612709826126c4565b915081905092915050565b7f7b226a736f6e727063223a2022322e30222c20226d6574686f64223a20226e7260008201527f5f676574546f6b656e42616c616e63653230222c20226964223a20312c20227060208201527f6172616d73223a205b2200000000000000000000000000000000000000000000604082015250565b6000612796604a8361230d565b91506127a182612714565b604a82019050919050565b7f222c220000000000000000000000000000000000000000000000000000000000600082015250565b60006127e260038361230d565b91506127ed826127ac565b600382019050919050565b600061280382612789565b915061280f82856123ac565b915061281a826127d5565b915061282682846123ac565b9150612831826126c4565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f7b22737263223a22000000000000000000000000000000000000000000000000600082015250565b60006128a260088361230d565b91506128ad8261286c565b600882019050919050565b7f222c226f70223a22000000000000000000000000000000000000000000000000600082015250565b60006128ee60088361230d565b91506128f9826128b8565b600882019050919050565b7f222c22647374223a220000000000000000000000000000000000000000000000600082015250565b600061293a60098361230d565b915061294582612904565b600982019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061298660028361230d565b915061299182612950565b600282019050919050565b60006129a782612895565b91506129b382866123ac565b91506129be826128e1565b91506129ca82856123ac565b91506129d58261292d565b91506129e182846123ac565b91506129ec82612979565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006040830160008301518482036000860152612a428282611d72565b91505060208301518482036020860152612a5c8282611d72565b9150508091505092915050565b6000612a758383612a25565b905092915050565b6000602082019050919050565b6000612a95826129f9565b612a9f8185612a04565b935083602082028501612ab185612a15565b8060005b85811015612aed5784840389528151612ace8582612a69565b9450612ad983612a7d565b925060208a01995050600181019050612ab5565b50829750879550505050505092915050565b60006080820190508181036000830152612b198187611cfc565b90508181036020830152612b2d8186611cfc565b90508181036040830152612b418185611cfc565b90508181036060830152612b558184612a8a565b905095945050505050565b60006020820190508181036000830152612b7a8184611cfc565b905092915050565b7f556e737570706f72746564206f70657261746f72000000000000000000000000600082015250565b6000612bb8601483611cb8565b9150612bc382612b82565b602082019050919050565b60006020820190508181036000830152612be781612bab565b905091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f6c6974656e7472792f76632d6a736f6e736368656d612f6d61696e2f646973742f736368656d61732f32352d746f6b656e2d686f6c64696e672d616d6f756e742f312d312d302e6a736f6e54686520616d6f756e74206f66206120706172746963756c617220746f6b656e20796f752061726520686f6c64696e67a2646970667358221220686bbb5f0a7f71c7ed4bc9ce77625a29cafb4bba5b35fdefe8895cbc9ee0927764736f6c634300080b0033687474703a2f2f6c6f63616c686f73743a31393533302f6e6f64657265616c5f6a736f6e7270632f76312f307843453764653634366537323038613445663131326362366564353033384641366343366231326533307835303332376336633561313464636164653730376162616432653237656235313764663837616235").unwrap(), - vec!["nodereal_api_key".to_string()] - ) - ); InMemorySmartContractRepo { map: map.into() } } }