/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import type { Provider, TransactionRequest } from "@ethersproject/providers";
import type { UAP, UAPInterface } from "../../Uap.t.sol/UAP";

const _abi = [
  {
    type: "function",
    name: "IS_TEST",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "pure",
  },
  {
    type: "function",
    name: "beamMainnetFork",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "uint256",
        internalType: "uint256",
      },
    ],
    stateMutability: "view",
  },
  {
    type: "function",
    name: "failed",
    inputs: [],
    outputs: [
      {
        name: "",
        type: "bool",
        internalType: "bool",
      },
    ],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "setUp",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "function",
    name: "test_teamAdvisorTokenClaim",
    inputs: [],
    outputs: [],
    stateMutability: "nonpayable",
  },
  {
    type: "event",
    name: "Log",
    inputs: [
      {
        name: "err",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogAddress",
    inputs: [
      {
        name: "value",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "address[]",
        indexed: false,
        internalType: "address[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "bool[]",
        indexed: false,
        internalType: "bool[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "bytes32[]",
        indexed: false,
        internalType: "bytes32[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "int256[]",
        indexed: false,
        internalType: "int256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "string[]",
        indexed: false,
        internalType: "string[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogArray",
    inputs: [
      {
        name: "value",
        type: "uint256[]",
        indexed: false,
        internalType: "uint256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogBytes",
    inputs: [
      {
        name: "value",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogBytes32",
    inputs: [
      {
        name: "value",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogInt256",
    inputs: [
      {
        name: "value",
        type: "int256",
        indexed: false,
        internalType: "int256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedAddress",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "address",
        indexed: false,
        internalType: "address",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "address[]",
        indexed: false,
        internalType: "address[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "bool[]",
        indexed: false,
        internalType: "bool[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "bytes32[]",
        indexed: false,
        internalType: "bytes32[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "int256[]",
        indexed: false,
        internalType: "int256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "string[]",
        indexed: false,
        internalType: "string[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedArray",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "uint256[]",
        indexed: false,
        internalType: "uint256[]",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedBytes",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "bytes",
        indexed: false,
        internalType: "bytes",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedBytes32",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "bytes32",
        indexed: false,
        internalType: "bytes32",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedInt256",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "int256",
        indexed: false,
        internalType: "int256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedString",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogNamedUint256",
    inputs: [
      {
        name: "key",
        type: "string",
        indexed: false,
        internalType: "string",
      },
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogString",
    inputs: [
      {
        name: "value",
        type: "string",
        indexed: false,
        internalType: "string",
      },
    ],
    anonymous: false,
  },
  {
    type: "event",
    name: "LogUint256",
    inputs: [
      {
        name: "value",
        type: "uint256",
        indexed: false,
        internalType: "uint256",
      },
    ],
    anonymous: false,
  },
] as const;

const _bytecode =
  "0x6080604052601280546001600160a01b03191673d51bfa777609213a653a2cd067c9a0132a2d316a17905534801561003657600080fd5b506201962d80620000486000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c80630a9254e41462000063578063283571a4146200006f57806354823cee146200008c578063ba414fa61462000096578063fa7626d414620000b1575b600080fd5b6200006d620000b9565b005b6200007960015481565b6040519081526020015b60405180910390f35b6200006d6200012f565b620000a062000d1c565b604051901515815260200162000083565b6001620000a0565b620000c362000e3d565b600660009054906101000a90046001600160a01b03166001600160a01b031663ba0bba406040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200011457600080fd5b505af115801562000129573d6000803e3d6000fd5b50505050565b604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b8152935162000262946001600160a01b03909216926370a082319284926336b19cd792600480840193919291829003018186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e1919062002190565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156200022157600080fd5b505afa15801562000236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025c9190620022ae565b62001da4565b600654604080516336b19cd760e01b815290516200037c926001600160a01b0316916370a082319183916336b19cd7916004808301926020929190829003018186803b158015620002b257600080fd5b505afa158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062002190565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003689190620022ae565b6c03b5f7199f897345f27000000062001df1565b6010546040516303223eab60e11b81526001600160a01b039091166004820152600080516020620195e1833981519152906306447d5690602401600060405180830381600087803b158015620003d157600080fd5b505af1158015620003e6573d6000803e3d6000fd5b50600080516020620195e1833981519152925063e5d6bf0291506200041190504262784ce0620023ef565b6040518263ffffffff1660e01b81526004016200043091815260200190565b600060405180830381600087803b1580156200044b57600080fd5b505af115801562000460573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663f59f45746040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620004b557600080fd5b505af1158015620004ca573d6000803e3d6000fd5b5050604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b815293516200054396509294506001600160a01b0316926370a082319284926336b19cd79260048082019391829003018186803b158015620001a657600080fd5b604080518082018252601c815260008051602062019601833981519152602080830191909152600654835163b079c4d760e01b81529351620005ad946001600160a01b039092169263b079c4d79260048082019391829003018186803b1580156200022157600080fd5b600080516020620195e183398151915263e5d6bf02620005d14262f099c0620023ef565b6040518263ffffffff1660e01b8152600401620005f091815260200190565b600060405180830381600087803b1580156200060b57600080fd5b505af115801562000620573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663f59f45746040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200067557600080fd5b505af11580156200068a573d6000803e3d6000fd5b5050604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b815293516200070396509294506001600160a01b0316926370a082319284926336b19cd79260048082019391829003018186803b158015620001a657600080fd5b604080518082018252601c815260008051602062019601833981519152602080830191909152600654835163b079c4d760e01b815293516200076d946001600160a01b039092169263b079c4d79260048082019391829003018186803b1580156200022157600080fd5b600080516020620195e183398151915263e5d6bf026200079242630168e6a0620023ef565b6040518263ffffffff1660e01b8152600401620007b191815260200190565b600060405180830381600087803b158015620007cc57600080fd5b505af1158015620007e1573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663f59f45746040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200083657600080fd5b505af11580156200084b573d6000803e3d6000fd5b5050604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b81529351620008c496509294506001600160a01b0316926370a082319284926336b19cd79260048082019391829003018186803b158015620001a657600080fd5b604080518082018252601c815260008051602062019601833981519152602080830191909152600654835163b079c4d760e01b815293516200092e946001600160a01b039092169263b079c4d79260048082019391829003018186803b1580156200022157600080fd5b600080516020620195e183398151915263e5d6bf0262000953426301e13380620023ef565b6040518263ffffffff1660e01b81526004016200097291815260200190565b600060405180830381600087803b1580156200098d57600080fd5b505af1158015620009a2573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663f59f45746040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b5050604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b8152935162000a8596509294506001600160a01b0316926370a082319284926336b19cd79260048082019391829003018186803b158015620001a657600080fd5b604080518082018252601c815260008051602062019601833981519152602080830191909152600654835163b079c4d760e01b8152935162000aef946001600160a01b039092169263b079c4d79260048082019391829003018186803b1580156200022157600080fd5b600080516020620195e183398151915263e5d6bf0262000b14426301e13380620023ef565b62000b21906064620023ef565b6040518263ffffffff1660e01b815260040162000b4091815260200190565b600060405180830381600087803b15801562000b5b57600080fd5b505af115801562000b70573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663f59f45746040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000bc557600080fd5b505af115801562000bda573d6000803e3d6000fd5b5050604080518082018252600f81526e63757272656e742062616c616e636560881b60208083019190915260065483516336b19cd760e01b8152935162000c5396509294506001600160a01b0316926370a082319284926336b19cd79260048082019391829003018186803b158015620001a657600080fd5b604080518082018252601c815260008051602062019601833981519152602080830191909152600654835163b079c4d760e01b8152935162000cbd946001600160a01b039092169263b079c4d79260048082019391829003018186803b1580156200022157600080fd5b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200011457600080fd5b6000805460ff161562000d2f5750600190565b600080516020620195e18339815191523b1562000e375760408051600080516020620195e1833981519152602082018190526519985a5b195960d21b8284015282518083038401815260608301909352600092909162000db4917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620022c8565b60408051601f198184030181529082905262000dd091620022fb565b6000604051808303816000865af19150503d806000811462000e0f576040519150601f19603f3d011682016040523d82523d6000602084013e62000e14565b606091505b5091505060008180602001905181019062000e3091906200228a565b9392505050565b50600090565b604051630637469360e31b815260206004820152601c60248201527f68747470733a2f2f6275696c642e6f6e6265616d2e636f6d2f727063000000006044820152600080516020620195e1833981519152906331ba349890606401602060405180830381600087803b15801562000eb357600080fd5b505af115801562000ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eee9190620022ae565b6001819055604051639ebf682760e01b81526004810191909152600080516020620195e183398151915290639ebf682790602401600060405180830381600087803b15801562000f3d57600080fd5b505af115801562000f52573d6000803e3d6000fd5b5050505060405162000f649062002055565b604051809103906000f08015801562000f81573d6000803e3d6000fd5b5060008054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163792e11f560e01b8152600a600482015291049091169063792e11f590602401600060405180830381600087803b15801562000fe757600080fd5b505af115801562000ffc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620010269190810190620021b0565b80516200103c91600e9160209091019062002063565b50600e60008154811062001054576200105462002445565b600091825260209091200154600f80546001600160a01b0319166001600160a01b03909216919091179055600e8054600190811062001097576200109762002445565b600091825260209091200154601080546001600160a01b0319166001600160a01b03909216919091179055600e80546002908110620010da57620010da62002445565b600091825260209091200154601180546001600160a01b0319166001600160a01b03909216919091179055600e805460039081106200111d576200111d62002445565b600091825260209091200154601380546001600160a01b0319166001600160a01b03909216919091179055600e8054600490811062001160576200116062002445565b600091825260209091200154601480546001600160a01b0319166001600160a01b03909216919091179055600e80546005908110620011a357620011a362002445565b600091825260209091200154601580546001600160a01b0319166001600160a01b0392831617905560135460405163c88a5e6d60e01b81529116600482015269d3c21bcecceda10000006024820152600080516020620195e18339815191529063c88a5e6d90604401600060405180830381600087803b1580156200122757600080fd5b505af11580156200123c573d6000803e3d6000fd5b505060145460405163c88a5e6d60e01b81526001600160a01b03909116600482015269d3c21bcecceda10000006024820152600080516020620195e1833981519152925063c88a5e6d9150604401600060405180830381600087803b158015620012a557600080fd5b505af1158015620012ba573d6000803e3d6000fd5b505060155460405163c88a5e6d60e01b81526001600160a01b03909116600482015269d3c21bcecceda10000006024820152600080516020620195e1833981519152925063c88a5e6d9150604401600060405180830381600087803b1580156200132357600080fd5b505af115801562001338573d6000803e3d6000fd5b505060135460405164e8d4a510009350600692506001600160a01b03909116906200136390620020cd565b62001371939291906200237f565b604051809103906000f0801580156200138e573d6000803e3d6000fd5b50600d80546001600160a01b0319166001600160a01b03928316179055601054604051911690620013bf90620020db565b6001600160a01b039091168152602001604051809103906000f080158015620013ec573d6000803e3d6000fd5b50600c80546001600160a01b03929092166001600160a01b031992831617905560078054909116737063f3446223bc4f5c37b0f9d1e12547f0358e901790556040516200143990620020e9565b604051809103906000f08015801562001456573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b039283169081179091556010546040519216916200148a90620020f7565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620014be573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03928316179055601054604051911690620014ef9062002105565b606080825260069082015265506c61736d6160d01b608082015260a06020820181905260039082015262504c5360e81b60c08201526001600160a01b03909116604082015260e001604051809103906000f08015801562001554573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b0392909216919091179055604051620015839062002113565b604051809103906000f080158015620015a0573d6000803e3d6000fd5b50600680546001600160a01b0319166001600160a01b03928316908117909155600f5460405191921690620015d59062002121565b620015e292919062002319565b604051809103906000f080158015620015ff573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392831690811790915560105460115460405163485cc95560e01b8152918416600483015290921660248301529063485cc95590604401600060405180830381600087803b1580156200166757600080fd5b505af11580156200167c573d6000803e3d6000fd5b5050600254600680546001600160a01b0319166001600160a01b039092169190911790555050604051620016b0906200212f565b604051809103906000f080158015620016cd573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b03928316908117909155600f5460405191921690620017029062002121565b6200170f92919062002319565b604051809103906000f0801580156200172c573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b03928316908117909155601054600854600554600654600c54604051636213b72760e01b8152948716600486015292861660248501529085166044840152683635c9adc5dea00000606484015267016345785d8a00006084840152841660a483015290921660c483015290636213b7279060e401600060405180830381600087803b158015620017d157600080fd5b505af1158015620017e6573d6000803e3d6000fd5b5050600254600380546001600160a01b0319166001600160a01b0390921691909117905550506040516200181a906200213d565b604051809103906000f08015801562001837573d6000803e3d6000fd5b50600980546001600160a01b0319166001600160a01b03928316908117909155600f54604051919216906200186c9062002121565b6200187992919062002319565b604051809103906000f08015801562001896573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392831690811790915560105460035460405163485cc95560e01b8152918416600483015290921660248301529063485cc95590604401600060405180830381600087803b158015620018fe57600080fd5b505af115801562001913573d6000803e3d6000fd5b5050600254600980546001600160a01b0319166001600160a01b03909216919091179055505060405162001947906200214b565b604051809103906000f08015801562001964573d6000803e3d6000fd5b50600b80546001600160a01b0319166001600160a01b03928316908117909155600f5460405191921690620019999062002121565b620019a692919062002319565b604051809103906000f080158015620019c3573d6000803e3d6000fd5b50600280546001600160a01b039283166001600160a01b03199182168117909255600b80549091168217905560105460065460405163c350a1b560e01b8152918416600483015260fa602483015290921660448301529063c350a1b590606401600060405180830381600087803b15801562001a3e57600080fd5b505af115801562001a53573d6000803e3d6000fd5b5050600654600b546010546040516001600160a01b03938416955091831693509091169062001a829062002159565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562001abf573d6000803e3d6000fd5b50600a80546001600160a01b0319166001600160a01b039283161790556010546040516303223eab60e11b815291166004820152600080516020620195e1833981519152906306447d5690602401600060405180830381600087803b15801562001b2857600080fd5b505af115801562001b3d573d6000803e3d6000fd5b505060035460095460405163a424c78360e01b81526001600160a01b0391821660048201529116925063a424c7839150602401600060405180830381600087803b15801562001b8b57600080fd5b505af115801562001ba0573d6000803e3d6000fd5b5050600354600b54604051635a3e62ab60e11b81526001600160a01b0391821660048201529116925063b47cc5569150602401600060405180830381600087803b15801562001bee57600080fd5b505af115801562001c03573d6000803e3d6000fd5b5050600354600d5460405163269fce9f60e11b815260006004820181905260248201526001600160a01b03918216604482015291169250634d3f9d3e9150606401600060405180830381600087803b15801562001c5f57600080fd5b505af115801562001c74573d6000803e3d6000fd5b50505050600660009054906101000a90046001600160a01b03166001600160a01b031663ba0bba406040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001cc957600080fd5b505af115801562001cde573d6000803e3d6000fd5b5050600b54600a54604051634d1044b960e01b81526001600160a01b03918216600482015291169250634d1044b99150602401600060405180830381600087803b15801562001d2c57600080fd5b505af115801562001d41573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200011457600080fd5b62001ded828260405160240162001dbd92919062002342565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b17905262001f1f565b5050565b80821462001ded577fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab60405162001e679060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015264743235365d60d81b606082015260800190565b60405180910390a160408051818152600a81830152690808115e1c1958dd195960b21b60608201526020810183905290517fe41397d8de5007c5d2f4564ba72bd2a8a09a8fdb658da682e22bcfa1193bb1d19181900360800190a160408051818152600a8183015269080808081058dd1d585b60b21b60608201526020810184905290517fe41397d8de5007c5d2f4564ba72bd2a8a09a8fdb658da682e22bcfa1193bb1d19181900360800190a162001ded62001f2d565b62001f2a8162002034565b50565b600080516020620195e18339815191523b62001f4557565b60408051600080516020620195e1833981519152602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905262001fc19291602001620022c8565b60408051601f198184030181529082905262001fdd91620022fb565b6000604051808303816000865af19150503d80600081146200201c576040519150601f19603f3d011682016040523d82523d6000602084013e62002021565b606091505b50506000805460ff191660011790555050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6107ba806200248883390190565b828054828255906000526020600020908101928215620020bb579160200282015b82811115620020bb57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062002084565b50620020c992915062002167565b5090565b61171d8062002c4283390190565b611f45806200435f83390190565b612bd980620062a483390190565b6104a48062008e7d83390190565b611ad7806200932183390190565b611a6c806200adf883390190565b610eb1806200c86483390190565b6157ac806200d71583390190565b6127ba8062012ec183390190565b61351f806201567b83390190565b610a478062018b9a83390190565b5b80821115620020c9576000815560010162002168565b80516200218b8162002471565b919050565b600060208284031215620021a357600080fd5b815162000e308162002471565b60006020808385031215620021c457600080fd5b825167ffffffffffffffff80821115620021dd57600080fd5b818501915085601f830112620021f257600080fd5b8151818111156200220757620022076200245b565b8060051b604051601f19603f830116810181811085821117156200222f576200222f6200245b565b604052828152858101935084860182860187018a10156200224f57600080fd5b600095505b838610156200227d5762002268816200217e565b85526001959095019493860193860162002254565b5098975050505050505050565b6000602082840312156200229d57600080fd5b8151801515811462000e3057600080fd5b600060208284031215620022c157600080fd5b5051919050565b6001600160e01b0319831681528151600090620022ed81600485016020870162002416565b919091016004019392505050565b600082516200230f81846020870162002416565b9190910192915050565b6001600160a01b0392831681529116602082015260606040820181905260009082015260800190565b60408152600083518060408401526200236381606085016020880162002416565b602083019390935250601f91909101601f191601606001919050565b60a081526000620023a460a0830160048152631554d11560e21b602082015260400190565b8281036020840152620023c88160048152631554d11560e21b602082015260400190565b6040840196909652505060ff9290921660608301526001600160a01b031660809091015290565b600082198211156200241157634e487b7160e01b600052601160045260246000fd5b500190565b60005b838110156200243357818101518382015260200162002419565b83811115620001295750506000910152565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811462001f2a57600080fdfe6b75736572206164647265737360a01b60a052600c6080527ffadd6953a0436e85528ded789af2e2b7e57c1cd7c68c5c3796d8ea67e0018db76001557f796f75206665656c696e67206c75636b792070756e6b3f00000000000000000060cc52601760ac5260e36040527f1982c532a5d29268425bcfbf045135788c5133835c8cab9378d36348feaa720f60025534801561009957600080fd5b50610711806100a96000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063ba414fa611610066578063ba414fa614610127578063cee1a8fc1461013f578063ec3206a1146100c1578063f82de7b014610154578063fa7626d41461016757600080fd5b8063792e11f514610098578063939cb064146100c1578063a199b3d3146100e2578063b90a68fa146100ea575b600080fd5b6100ab6100a636600461059c565b61016e565b6040516100b89190610620565b60405180910390f35b6100d46100cf36600461059c565b6102f9565b6040519081526020016100b8565b6100d4610314565b600180546040805160208082018490528251808303820181528284019384905280519101209093556001600160a01b0390911690526060016100b8565b61012f610341565b60405190151581526020016100b8565b61015261014d36600461059c565b610462565b005b61015261016236600461059c565b6104d9565b600161012f565b606060008267ffffffffffffffff81111561018b5761018b6106ee565b6040519080825280602002602001820160405280156101b4578160200160208202803683370190505b50905060005b838110156102f2576000306001600160a01b031663b90a68fa6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156101ff57600080fd5b505af1158015610213573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102379190610551565b60405163c88a5e6d60e01b81526001600160a01b038216600482015268056bc75e2d631000006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561029e57600080fd5b505af11580156102b2573d6000803e3d6000fd5b50505050808383815181106102c9576102c96106d8565b6001600160a01b0390921660209283029190910190910152506102eb81610685565b90506101ba565b5092915050565b600081610304610314565b61030e91906106a0565b92915050565b60025460408051602081018390520160408051601f19818403018152919052805160209091012060025590565b6000805460ff16156103535750600190565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045c5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b828401528251808303840181526060830190935260009290916103df917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016105f0565b60408051601f19818403018152908290526103f991610614565b6000604051808303816000865af19150503d8060008114610436576040519150601f19603f3d011682016040523d82523d6000602084013e61043b565b606091505b50915050600081806020019051810190610455919061057a565b9392505050565b50600090565b737109709ecfa91a80626ff3989d68f67f5b1dd12d63e5d6bf02610486834261066d565b6040518263ffffffff1660e01b81526004016104a491815260200190565b600060405180830381600087803b1580156104be57600080fd5b505af11580156104d2573d6000803e3d6000fd5b5050505050565b60006104e5824361066d565b6040516301f7b4f360e41b815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631f7b4f3090602401600060405180830381600087803b15801561053557600080fd5b505af1158015610549573d6000803e3d6000fd5b505050505050565b60006020828403121561056357600080fd5b81516001600160a01b038116811461045557600080fd5b60006020828403121561058c57600080fd5b8151801515811461045557600080fd5b6000602082840312156105ae57600080fd5b5035919050565b6000815160005b818110156105d657602081850181015186830152016105bc565b818111156105e5576000828601525b509290920192915050565b6001600160e01b031983168152600061060c60048301846105b5565b949350505050565b600061045582846105b5565b6020808252825182820181905260009190848201906040850190845b818110156106615783516001600160a01b03168352928401929184019160010161063c565b50909695505050505050565b60008219821115610680576106806106c2565b500190565b6000600019821415610699576106996106c2565b5060010190565b6000826106bd57634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000807000a60806040526006805460ff191660121790553480156200001e57600080fd5b506040516200171d3803806200171d833981016040819052620000419162000398565b8451859085906200005a9060039060208501906200023b565b508051620000709060049060208401906200023b565b505050620000858184620000d060201b60201c565b620000b17ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc98262000197565b506006805460ff191660ff9290921691909117905550620004c2915050565b6001600160a01b0382166200012b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200013f919062000448565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620001935760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b82805462000249906200046f565b90600052602060002090601f0160209004810192826200026d5760008555620002b8565b82601f106200028857805160ff1916838001178555620002b8565b82800160010185558215620002b8579182015b82811115620002b85782518255916020019190600101906200029b565b50620002c6929150620002ca565b5090565b5b80821115620002c65760008155600101620002cb565b600082601f830112620002f357600080fd5b81516001600160401b0380821115620003105762000310620004ac565b604051601f8301601f19908116603f011681019082821181831017156200033b576200033b620004ac565b816040528381526020925086838588010111156200035857600080fd5b600091505b838210156200037c57858201830151818301840152908201906200035d565b838211156200038e5760008385830101525b9695505050505050565b600080600080600060a08688031215620003b157600080fd5b85516001600160401b0380821115620003c957600080fd5b620003d789838a01620002e1565b96506020880151915080821115620003ee57600080fd5b50620003fd88828901620002e1565b94505060408601519250606086015160ff811681146200041c57600080fd5b60808701519092506001600160a01b03811681146200043a57600080fd5b809150509295509295909350565b600082198211156200046a57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200048457607f821691505b60208210811415620004a657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61124b80620004d26000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806342966c68116100c3578063a217fddf1161007c578063a217fddf146102c8578063a457c2d7146102d0578063a9059cbb146102e3578063d547741f146102f6578063dd62ed3e14610309578063fe6d81241461031c57600080fd5b806342966c681461025157806370a082311461026457806376809ce31461028d57806379cc67901461029a57806391d14854146102ad57806395d89b41146102c057600080fd5b8063248a9ca311610115578063248a9ca3146101c75780632f2ff15d146101ea578063313ce567146101ff57806336568abe14610218578063395093511461022b57806340c10f191461023e57600080fd5b806301ffc9a71461015257806306fdde031461017a578063095ea7b31461018f57806318160ddd146101a257806323b872dd146101b4575b600080fd5b61016561016036600461107b565b610343565b60405190151581526020015b60405180910390f35b61018261037a565b604051610171919061111a565b61016561019d366004611015565b61040c565b6002545b604051908152602001610171565b6101656101c2366004610fd9565b610424565b6101a66101d536600461103f565b60009081526005602052604090206001015490565b6101fd6101f8366004611058565b610448565b005b60065460ff165b60405160ff9091168152602001610171565b6101fd610226366004611058565b610472565b610165610239366004611015565b6104f5565b6101a661024c366004611015565b610517565b6101fd61025f36600461103f565b610602565b6101a6610272366004610f8b565b6001600160a01b031660009081526020819052604090205490565b6006546102069060ff1681565b6101fd6102a8366004611015565b61060f565b6101656102bb366004611058565b610624565b61018261064f565b6101a6600081565b6101656102de366004611015565b61065e565b6101656102f1366004611015565b6106d9565b6101fd610304366004611058565b6106e7565b6101a6610317366004610fa6565b61070c565b6101a67ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b60006001600160e01b03198216637965db0b60e01b148061037457506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610389906111c7565b80601f01602080910402602001604051908101604052809291908181526020018280546103b5906111c7565b80156104025780601f106103d757610100808354040283529160200191610402565b820191906000526020600020905b8154815290600101906020018083116103e557829003601f168201915b5050505050905090565b60003361041a818585610737565b5060019392505050565b60003361043285828561085b565b61043d8585856108d5565b506001949350505050565b60008281526005602052604090206001015461046381610a79565b61046d8383610a83565b505050565b6001600160a01b03811633146104e75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104f18282610b09565b5050565b60003361041a818585610508838361070c565b610512919061114d565b610737565b60006105437ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc933610624565b6105a55760405162461bcd60e51b815260206004820152602d60248201527f4f6e6c7920416464726573732077697468206d696e74657220726f6c6520636160448201526c6e206d696e7420746f6b656e7360981b60648201526084016104de565b816105f25760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e742073686f756c642062652067726561746572207468616e20300060448201526064016104de565b6105fc8383610b70565b50919050565b61060c3382610c2f565b50565b61061a82338361085b565b6104f18282610c2f565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610389906111c7565b6000338161066c828661070c565b9050838110156106cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104de565b61043d8286868403610737565b60003361041a8185856108d5565b60008281526005602052604090206001015461070281610a79565b61046d8383610b09565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166107995760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104de565b6001600160a01b0382166107fa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104de565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610867848461070c565b905060001981146108cf57818110156108c25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104de565b6108cf8484848403610737565b50505050565b6001600160a01b0383166109395760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104de565b6001600160a01b03821661099b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104de565b6001600160a01b03831660009081526020819052604090205481811015610a135760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104de565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36108cf565b61060c8133610d61565b610a8d8282610624565b6104f15760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610ac53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610b138282610624565b156104f15760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038216610bc65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104de565b8060026000828254610bd8919061114d565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610c8f5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104de565b6001600160a01b03821660009081526020819052604090205481811015610d035760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104de565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b610d6b8282610624565b6104f157610d7881610dba565b610d83836020610dcc565b604051602001610d949291906110a5565b60408051601f198184030181529082905262461bcd60e51b82526104de9160040161111a565b60606103746001600160a01b03831660145b60606000610ddb836002611165565b610de690600261114d565b67ffffffffffffffff811115610dfe57610dfe611228565b6040519080825280601f01601f191660200182016040528015610e28576020820181803683370190505b509050600360fc1b81600081518110610e4357610e43611212565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110610e7257610e72611212565b60200101906001600160f81b031916908160001a9053506000610e96846002611165565b610ea190600161114d565b90505b6001811115610f19576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110610ed557610ed5611212565b1a60f81b828281518110610eeb57610eeb611212565b60200101906001600160f81b031916908160001a90535060049490941c93610f12816111b0565b9050610ea4565b508315610f685760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104de565b9392505050565b80356001600160a01b0381168114610f8657600080fd5b919050565b600060208284031215610f9d57600080fd5b610f6882610f6f565b60008060408385031215610fb957600080fd5b610fc283610f6f565b9150610fd060208401610f6f565b90509250929050565b600080600060608486031215610fee57600080fd5b610ff784610f6f565b925061100560208501610f6f565b9150604084013590509250925092565b6000806040838503121561102857600080fd5b61103183610f6f565b946020939093013593505050565b60006020828403121561105157600080fd5b5035919050565b6000806040838503121561106b57600080fd5b82359150610fd060208401610f6f565b60006020828403121561108d57600080fd5b81356001600160e01b031981168114610f6857600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516110dd816017850160208801611184565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161110e816028840160208801611184565b01602801949350505050565b6020815260008251806020840152611139816040850160208701611184565b601f01601f19169190910160400192915050565b60008219821115611160576111606111fc565b500190565b600081600019048311821515161561117f5761117f6111fc565b500290565b60005b8381101561119f578181015183820152602001611187565b838111156108cf5750506000910152565b6000816111bf576111bf6111fc565b506000190190565b600181811c908216806111db57607f821691505b602082108114156105fc57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000807000a60806040523480156200001157600080fd5b5060405162001f4538038062001f45833981016040819052620000349162000a50565b6200003f336200091f565b620003a26103e87fccfe08badd7fbee8a36c1d2ba2b3090f679bf1a4970d307adddb9d938fc7bd72556113887fb116e49c5d725dff7d04eff8de2b6cba606adebd5c51d140fbe3ec5c272c5f7355614e207fc97a69e6e2de1bb9e27f629ecf2981a64edb688b55347fa4daae7dde857b7d91556175307ffa37840a14799ca23d33c55b9b42830805d3d3decc30cbf9394f7f7c62042ab3819055619c407fff03117aca25b284633eab259ac0c2394bf76e317400110747ed535c446b6d5a8190556104b07fedb38a93e6e2e82dbb40826a878df1d817a37ef13fcaa25248649a90fa47497b556117707f58e76cff22dd72278c8f84685a17f449f02ff85d2e9a03f82022b6f39564086055615dc07f158767340ba23d54c9df5ae99b956057eea7a83ae8538a2dc391c346fd5136e255618ca07f5d6cd7de0286a98dfeda5747bd584a64ab88877681c0079306854ffd7e7c1a035561bb807f905a7e789ce10f3196ebafd6961387e80b07e8c162f5e6ee6a1006abce80139e556105dc7fe28818af7bb947aef01108c00a0155d810d5eea20893e766795b298bc4db781955611d4c7f42f44160cc2e77bbab1a45023ad285dcfafdd00b6fed6e77933c71a0ddb5df3f557fc4660acc4bd0a40bb2aaddc291a83b2fbde6034df1730ebf08010adf2b6786479190915561afc87f350ab52e3bd5168bfe0c12fa1e681e86e66c136cc21ab97368d3d0682461e0f55561ea607f82d6bd3809c82dd5d8ed6c797b795cebc818a5428745e8871e23482c0af67f1d819055620124f87f2e6f4cae5d25310d2f5e3e67123cbd2726a8b441f8627bccbb96d71df5d5ccd8556107d07fe274e030096b679b4f85765392b8d9c193468dcc79489f9ef2e4555d9913da5f556127107fc57d9bce4232b7d5f8cf6d73a7aca17cf0abf49995b3841141095bc9f1c96ced557fadcf0102a3b6ed77d2b232c66d6d760bb129429915f070489c73c0ce2ec87de0919091557f2f0b2f4b0fc93ab043d3d4fa5e90f5122cc1c0be4812f3da329115acdaa7df9355620138807f34a2343d0d2f4c847345efd372438cdb34b8003ef6fe81f277c68d26e321e3c85560066000527f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b602052620186a07fd0486956a4fd452fef9be90b5e55178bbc3faed0b808669ae4e49a94f1b8112b55565b6200090d6107d07f52294fcb08f2fdae1b20b0415a5ee714611bc28109dfadbf3972b557a47d28a1556127107f604a8bbf84ea695d5e0b2e0050a1deac40ace3ce3403481b3ab3b577e874580855619c407f7d87d57a7f33c6be62aa8dd5e863b1c4fad03911ee1749a342904d75641c1b1a5561ea607f7f489cfef20aebc887f3f6dfc376561c7a087e26ef321f6fd022cb3d4010792b8190556109607f92864aa2f9eb4f50f5d107484a73eda12e087425957ca38b7e08f665e621651055612ee07fdc91c2cba0f231ec52b38d5e4e51aaa6b276c3a4131fb48c9fcc2a963241496c5561bb807f328fbcfc4386c759df5cfe1a119dd3e50a28b947635c8dd9ea182641fe46c02c55620119407fb318cc1ab0f09ea2df6badcf19dd3b5ae690e79e4c4a3d0944ed38041b30ca9855610bb87f7f044650b405c2af42542a8c5302665edb047ed896ff5e562651b16d161a380f819055613a987fcf23ae71d0c957e1744c498b359e72498e4ffa6e1bb09068307099b7fa9154238190557f4940548ae80bfc4d33d1baf17cb184e099c0dc5ead116fc08045743169c291ca83905562015f907f1643611545f66cf246be16b2e62820a279e2c26205a37f05b54c9c74ca353a1a8190556201d4c07f750af7b37ee002f3b4ae2aa98457db22b5a258b4ad86a5ae7c8a756d9b206092819055610fa07fbbcfea5840dba18ae92d7a39470b125b09d71009ce58b3ee46506d9e672929a555614e207f169cb5b3f9a2ab59f8b3ce0d90a4d142d4bc885c06d817b2479eb3e48cc0985855620138807f0fd3f2e321d305078d87f84bf4ce0056dc2defe0381e9f2e1a2b3f0c200a61bc557f74a9de854f658fac79a1e2b57b23bb7d56e5e51520bb278b52e863338ae13acd819055620271007fa3a58dce6c1996b42ee0b84fac29d395320f79917b5e96b2b415e232792172c0556105dc7f9bfb8699c6e33bc6eaebaf77c87a8690c53ef14ddc41f0be1f58da30bd38ead455611d4c7f99b127638706f3632ed406928d5db19172ef0648d7305ef3c7c333f79f4598c0556175307f3523d6982c0ae2e1606d07136a3ca1fa860708cf6b7e241e7497cc1936bc361a5561afc87fc125f6ea4b8e6b1fbfda0f1e7580f85d29686a922e19672183a572f108d4ed4d8190556107087f4a1409d25e0eb18a2766c893aba3242cde021a21bfaf25e8427a76110c93a499556123287fd6d6ea3e778866e69fc10bb1d000dd432e7041a965815972b0994f1528bb9ebf55618ca07f585e23f16d5b0b647d9e8e743c38a1ef4da1e544de301087af904b6878b0d5e95561d2f07faa8d1ce747c1287a061e0c21a9513fb4e2f5640c433dcaf3d9b962aff635c1e5556108ca7f16c5a7805b905509aa6e0317390e2abea4da7813fed5229ecb045e0efa772c7655612bf27f32b5cd14a1f7cc9707568db79d4d815bc52745231a3934a0626a0d4d463dc3a5557fa82e832f54a18972039866aa5ea4f7af3983220ee50dd3c9c8d9e7d88909991d55620107ac7f6981341f65fb18df2fb1c5306dbebf0e2786ae590e5cbbeda9dfa6afae4dbb02557f55614b3b2de957fbef848c8139b4ff534c898305de8c0b39ede3622c598ad103919091557f2a19cbfb694a9d82c92c03e20ae504f0ec63cbcc2838655e7cbbb2a7562c8a12929092557fa714862220533757192431eb2428e11c3c462032e0336d2a1b954ddf8ad2cc87557f7cc3b34ee92552c4eef4ddf266346616c021983515ab6954014f5c3bc179527e91909155620dbba07f4e894ef26f54b19b8327719ea8cab51d7901d316df5d28e28e1c2a1c7cfce0865560056000527f85c8d53f896f29b263aef4a7c060c9014c20977dbb5ec4ce69dbd3968de6e4d36020527f7ade6040f5e4f55b3dab4b05ff4889749ad71046b4825a0d7df02d26dc33f78e55565b62000918816200096f565b5062000a82565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000979620009f2565b6001600160a01b038116620009e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620009ef816200091f565b50565b6000546001600160a01b0316331462000a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620009db565b565b60006020828403121562000a6357600080fd5b81516001600160a01b038116811462000a7b57600080fd5b9392505050565b6114b38062000a926000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806391c3a8901161007157806391c3a8901461014a578063b56c498614610175578063d472434b14610188578063db8632761461019b578063f2fde38b146101ae578063fb90df5d146101c157600080fd5b806309a56f9a146100ae578063547e9830146100d4578063715018a6146100f4578063781c4ac4146100fe5780638da5cb5b1461012f575b600080fd5b6100c16100bc3660046112e5565b6101d4565b6040519081526020015b60405180910390f35b6100e76100e2366004611273565b61027b565b6040516100cb919061134c565b6100fc6108af565b005b6100c161010c3660046111a6565b600260209081526000938452604080852082529284528284209052825290205481565b6000546040516001600160a01b0390911681526020016100cb565b6100c16101583660046111e9565b600160209081526000928352604080842090915290825290205481565b6100fc610183366004611295565b6108c3565b6100e7610196366004611213565b610a32565b6100c16101a9366004611273565b610e04565b6100fc6101bc366004611176565b610e66565b6100fc6101cf36600461122c565b610edf565b6000600260008560038111156101ec576101ec611464565b60038111156101fd576101fd611464565b600381111561020e5761020e611464565b8152602001908152602001600020600084600181111561023057610230611464565b600181111561024157610241611464565b600181111561025257610252611464565b815260200190815260200160002060008381526020019081526020016000205490509392505050565b6102836110a8565b600083600381111561029757610297611464565b60038111156102a8576102a8611464565b14806102d6575060018360038111156102c3576102c3611464565b60038111156102d4576102d4611464565b145b15610573576040518060a00160405280600260008660038111156102fc576102fc611464565b600381111561030d5761030d611464565b600381111561031e5761031e611464565b8152602001908152602001600020600085600181111561034057610340611464565b600181111561035157610351611464565b600181111561036257610362611464565b81526020019081526020016000206000600181526020019081526020016000205481526020016002600086600381111561039e5761039e611464565b60038111156103af576103af611464565b60038111156103c0576103c0611464565b815260200190815260200160002060008560018111156103e2576103e2611464565b60018111156103f3576103f3611464565b600181111561040457610404611464565b81526020019081526020016000206000600281526020019081526020016000205481526020016002600086600381111561044057610440611464565b600381111561045157610451611464565b600381111561046257610462611464565b8152602001908152602001600020600085600181111561048457610484611464565b600181111561049557610495611464565b60018111156104a6576104a6611464565b8152602001908152602001600020600060038152602001908152602001600020548152602001600260008660038111156104e2576104e2611464565b60038111156104f3576104f3611464565b600381111561050457610504611464565b8152602001908152602001600020600085600181111561052657610526611464565b600181111561053757610537611464565b600181111561054857610548611464565b81526020808201929092526040908101600090812060048252835290812054835291015290506108a9565b6040518060a001604052806002600086600381111561059457610594611464565b60038111156105a5576105a5611464565b60038111156105b6576105b6611464565b815260200190815260200160002060008560018111156105d8576105d8611464565b60018111156105e9576105e9611464565b60018111156105fa576105fa611464565b81526020019081526020016000206000600181526020019081526020016000205481526020016002600086600381111561063657610636611464565b600381111561064757610647611464565b600381111561065857610658611464565b8152602001908152602001600020600085600181111561067a5761067a611464565b600181111561068b5761068b611464565b600181111561069c5761069c611464565b8152602001908152602001600020600060028152602001908152602001600020548152602001600260008660038111156106d8576106d8611464565b60038111156106e9576106e9611464565b60038111156106fa576106fa611464565b8152602001908152602001600020600085600181111561071c5761071c611464565b600181111561072d5761072d611464565b600181111561073e5761073e611464565b81526020019081526020016000206000600381526020019081526020016000205481526020016002600086600381111561077a5761077a611464565b600381111561078b5761078b611464565b600381111561079c5761079c611464565b815260200190815260200160002060008560018111156107be576107be611464565b60018111156107cf576107cf611464565b60018111156107e0576107e0611464565b81526020019081526020016000206000600481526020019081526020016000205481526020016002600086600381111561081c5761081c611464565b600381111561082d5761082d611464565b600381111561083e5761083e611464565b8152602001908152602001600020600085600181111561086057610860611464565b600181111561087157610871611464565b600181111561088257610882611464565b81526020019081526020016000206000600581526020019081526020016000205481525090505b92915050565b6108b7610ffe565b6108c16000611058565b565b6108cb610ffe565b6040805180820190915260018152602360f91b6020820152600384111561090e5760405162461bcd60e51b8152600401610905919061137d565b60405180910390fd5b5060005b81518110156109f15781818151811061092d5761092d61147a565b60200260200101516002600086600381111561094b5761094b611464565b600381111561095c5761095c611464565b600381111561096d5761096d611464565b8152602001908152602001600020600085600181111561098f5761098f611464565b60018111156109a0576109a0611464565b60018111156109b1576109b1611464565b815260200190815260200160002060008360016109ce919061141b565b8152602081019190915260400160002055806109e981611433565b915050610912565b507f5f2024dbf48ff46edaace412301912fcfc14609e677c62eabe60a03f7f1f20f2838383604051610a25939291906113f3565b60405180910390a1505050565b610a3a6110a8565b6000826003811115610a4e57610a4e611464565b6003811115610a5f57610a5f611464565b1480610a8d57506001826003811115610a7a57610a7a611464565b6003811115610a8b57610a8b611464565b145b15610c19576040518060a0016040528060016000856003811115610ab357610ab3611464565b6003811115610ac457610ac4611464565b6003811115610ad557610ad5611464565b815260200190815260200160002060006001815260200190815260200160002054815260200160016000856003811115610b1157610b11611464565b6003811115610b2257610b22611464565b6003811115610b3357610b33611464565b815260200190815260200160002060006002815260200190815260200160002054815260200160016000856003811115610b6f57610b6f611464565b6003811115610b8057610b80611464565b6003811115610b9157610b91611464565b815260200190815260200160002060006003815260200190815260200160002054815260200160016000856003811115610bcd57610bcd611464565b6003811115610bde57610bde611464565b6003811115610bef57610bef611464565b81526020808201929092526040908101600090812060048252835290812054835291015292915050565b6040518060a0016040528060016000856003811115610c3a57610c3a611464565b6003811115610c4b57610c4b611464565b6003811115610c5c57610c5c611464565b815260200190815260200160002060006001815260200190815260200160002054815260200160016000856003811115610c9857610c98611464565b6003811115610ca957610ca9611464565b6003811115610cba57610cba611464565b815260200190815260200160002060006002815260200190815260200160002054815260200160016000856003811115610cf657610cf6611464565b6003811115610d0757610d07611464565b6003811115610d1857610d18611464565b815260200190815260200160002060006003815260200190815260200160002054815260200160016000856003811115610d5457610d54611464565b6003811115610d6557610d65611464565b6003811115610d7657610d76611464565b815260200190815260200160002060006004815260200190815260200160002054815260200160016000856003811115610db257610db2611464565b6003811115610dc357610dc3611464565b6003811115610dd457610dd4611464565b8152602001908152602001600020600060058152602001908152602001600020548152509050919050565b919050565b600060016000846003811115610e1c57610e1c611464565b6003811115610e2d57610e2d611464565b6003811115610e3e57610e3e611464565b8152602001908152602001600020600083815260200190815260200160002054905092915050565b610e6e610ffe565b6001600160a01b038116610ed35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610905565b610edc81611058565b50565b610ee7610ffe565b6040805180820190915260018152602360f91b60208201526003831115610f215760405162461bcd60e51b8152600401610905919061137d565b5060005b8151811015610fc057818181518110610f4057610f4061147a565b602002602001015160016000856003811115610f5e57610f5e611464565b6003811115610f6f57610f6f611464565b6003811115610f8057610f80611464565b81526020019081526020016000206000836001610f9d919061141b565b815260208101919091526040016000205580610fb881611433565b915050610f25565b507f564d31fbb1672b36bb8b65ea0fe590b21cf59a642ed4b434c2759d7eff4328ce8282604051610ff29291906113d2565b60405180910390a15050565b6000546001600160a01b031633146108c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610905565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060a001604052806005906020820280368337509192915050565b600082601f8301126110d757600080fd5b8135602067ffffffffffffffff808311156110f4576110f4611490565b8260051b604051601f19603f8301168101818110848211171561111957611119611490565b6040528481528381019250868401828801850189101561113857600080fd5b600092505b8583101561115b57803584529284019260019290920191840161113d565b50979650505050505050565b803560048110610dff57600080fd5b60006020828403121561118857600080fd5b81356001600160a01b038116811461119f57600080fd5b9392505050565b6000806000606084860312156111bb57600080fd5b6111c484611167565b92506020840135600281106111d857600080fd5b929592945050506040919091013590565b600080604083850312156111fc57600080fd5b61120583611167565b946020939093013593505050565b60006020828403121561122557600080fd5b5035919050565b6000806040838503121561123f57600080fd5b82359150602083013567ffffffffffffffff81111561125d57600080fd5b611269858286016110c6565b9150509250929050565b6000806040838503121561128657600080fd5b50508035926020909101359150565b6000806000606084860312156112aa57600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156112cf57600080fd5b6112db868287016110c6565b9150509250925092565b6000806000606084860312156112fa57600080fd5b505081359360208301359350604090920135919050565b600081518084526020808501945080840160005b8381101561134157815187529582019590820190600101611325565b509495945050505050565b60a08101818360005b6005811015611374578151835260209283019290910190600101611355565b50505092915050565b600060208083528351808285015260005b818110156113aa5785810183015185820160400152820161138e565b818111156113bc576000604083870101525b50601f01601f1916929092016040019392505050565b8281526040602082015260006113eb6040830184611311565b949350505050565b8381528260208201526060604082015260006114126060830184611311565b95945050505050565b6000821982111561142e5761142e61144e565b500190565b60006000198214156114475761144761144e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000807000a60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612ae680620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063b88d4fde11610097578063c70fbf7411610071578063c70fbf7414610400578063c87b56dd14610413578063e985e9c514610426578063f2fde38b1461046257600080fd5b8063b88d4fde146103c6578063c45a0155146103d9578063c529b32f146103ed57600080fd5b806395d89b41116100d357806395d89b411461035d578063a01e7b2814610365578063a22cb465146103a9578063b503a2b9146103bc57600080fd5b8063715018a61461033157806380002091146103395780638da5cb5b1461034c57600080fd5b806323b872dd1161016657806342842e0e1161014057806342842e0e146102e55780634f6ccce7146102f85780636352211e1461030b57806370a082311461031e57600080fd5b806323b872dd146102975780632f745c59146102aa5780633bebf086146102bd57600080fd5b8063095ea7b3116101a2578063095ea7b314610231578063150b7a02146102465780631794bb3c1461027257806318160ddd1461028557600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d7366004612693565b610475565b60405190151581526020015b60405180910390f35b6101f96104a0565b6040516101e891906127a0565b6102196102143660046126cd565b610532565b6040516001600160a01b0390911681526020016101e8565b61024461023f366004612636565b610559565b005b61025961025436600461251e565b610674565b6040516001600160e01b031990911681526020016101e8565b6102446102803660046124e2565b610685565b60cb545b6040519081526020016101e8565b6102446102a53660046124e2565b610859565b6102896102b8366004612636565b61088a565b6102d06102cb3660046126e6565b610920565b604080519283526020830191909152016101e8565b6102446102f33660046124e2565b610965565b6102896103063660046126cd565b610980565b6102196103193660046126cd565b610a13565b61028961032c366004612494565b610a73565b610244610af9565b6102446103473660046126e6565b610b0d565b6033546001600160a01b0316610219565b6101f9610bf9565b61039b6103733660046126e6565b6101616020908152600092835260408084209091529082529020805460019091015460ff1682565b6040516101e8929190612950565b6102446103b73660046125fa565b610c08565b61028961015f5481565b6102446103d436600461251e565b610c17565b61016054610219906001600160a01b031681565b6102446103fb366004612660565b610c49565b61024461040e366004612636565b6111b4565b6101f96104213660046126cd565b611555565b6101dc6104343660046124af565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205460ff1690565b610244610470366004612494565b6115c9565b60006001600160e01b0319821663780e9d6360e01b148061049a575061049a82611642565b92915050565b6060609780546104af906129dd565b80601f01602080910402602001604051908101604052809291908181526020018280546104db906129dd565b80156105285780601f106104fd57610100808354040283529160200191610528565b820191906000526020600020905b81548152906001019060200180831161050b57829003601f168201915b5050505050905090565b600061053d82611692565b506000908152609b60205260409020546001600160a01b031690565b600061056482610a13565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806105f357506105f38133610434565b6106655760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016105ce565b61066f83836116f1565b505050565b630a85bd0160e11b5b949350505050565b600054610100900460ff16158080156106a55750600054600160ff909116105b806106bf5750303b1580156106bf575060005460ff166001145b6107225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ce565b6000805460ff191660011790558015610745576000805461ff0019166101001790555b6001600160a01b038416158061076257506001600160a01b038316155b156107805760405163f8b7150760e01b815260040160405180910390fd5b6107d26040518060400160405280600c81526020016b537570657247616c6174696360a01b8152506040518060400160405280600c81526020016b537570657247616c6174696360a01b81525061175f565b6107da611790565b6107e26117b7565b6107eb846115c9565b61015f82905561016080546001600160a01b0319166001600160a01b0385161790558015610853576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b61086333826117e6565b61087f5760405162461bcd60e51b81526004016105ce906127b3565b61066f838383611864565b600061089583610a73565b82106108f75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016105ce565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b6000828152610161602090815260408083208484529091528120805460018201548392919060ff16600381111561095957610959612a6b565b92509250509250929050565b61066f83838360405180602001604052806000815250610c17565b600061098b60cb5490565b82106109ee5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016105ce565b60cb8281548110610a0157610a01612a97565b90600052602060002001549050919050565b6000818152609960205260408120546001600160a01b03168061049a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105ce565b60006001600160a01b038216610add5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016105ce565b506001600160a01b03166000908152609a602052604090205490565b610b016119d5565b610b0b6000611a2f565b565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610b525760405162461bcd60e51b81526004016105ce91906127a0565b5060008181526101616020908152604080832085845290915290208054610b7a906001612982565b80825560018201547f05152de66c9e6670759e073203a749937a7427a65ba4ececb8b23e4e05c4f9e79130918591879160ff166003811115610bbe57610bbe612a6b565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a0015b60405180910390a1505050565b6060609880546104af906129dd565b610c13338383611a81565b5050565b610c2133836117e6565b610c3d5760405162461bcd60e51b81526004016105ce906127b3565b61085384848484611b50565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610c8e5760405162461bcd60e51b81526004016105ce91906127a0565b506000610c9a60cb5490565b610ca5906001612982565b90506127118110604051806040016040528060028152602001610c8d60f21b81525090610ce55760405162461bcd60e51b81526004016105ce91906127a0565b50610d0384610cf360cb5490565b610cfe906001612982565b611b83565b6000610d10826000611b9d565b90506000610d1f836001611b9d565b90506000610d2e846002611b9d565b90506000610d3d856003611b9d565b90506000610d4c866004611b9d565b90506000610d5b876005611b9d565b9050604051806040016040528060008152602001876003811115610d8157610d81612a6b565b9052600088815261016160209081526040808320600180855290835292208351815590830151818301805492939192909160ff1990911690836003811115610dcb57610dcb612a6b565b0217905550905050604051806040016040528060008152602001866003811115610df757610df7612a6b565b90526000888152610161602052604081209060038152602080820192909252604001600020825181559082015160018083018054909160ff1990911690836003811115610e4657610e46612a6b565b0217905550905050604051806040016040528060008152602001856003811115610e7257610e72612a6b565b9052600088815261016160209081526040808320600684528252909120825181559082015160018083018054909160ff1990911690836003811115610eb957610eb9612a6b565b0217905550905050604051806040016040528060008152602001846003811115610ee557610ee5612a6b565b9052600088815261016160209081526040808320600284528252909120825181559082015160018083018054909160ff1990911690836003811115610f2c57610f2c612a6b565b0217905550905050604051806040016040528060008152602001836003811115610f5857610f58612a6b565b9052600088815261016160209081526040808320600584528252909120825181559082015160018083018054909160ff1990911690836003811115610f9f57610f9f612a6b565b0217905550905050604051806040016040528060008152602001826003811115610fcb57610fcb612a6b565b9052600088815261016160209081526040808320600484528252909120825181559082015160018083018054909160ff199091169083600381111561101257611012612a6b565b02179055505060408051600680825260e0820190925260009250906020820160c08036833701905050905086600381111561104f5761104f612a6b565b8160008151811061106257611062612a97565b60200260200101818152505085600381111561108057611080612a6b565b8160018151811061109357611093612a97565b6020026020010181815250508460038111156110b1576110b1612a6b565b816002815181106110c4576110c4612a97565b6020026020010181815250508360038111156110e2576110e2612a6b565b816003815181106110f5576110f5612a97565b60200260200101818152505082600381111561111357611113612a6b565b8160048151811061112657611126612a97565b60200260200101818152505081600381111561114457611144612a6b565b8160058151811061115757611157612a97565b6020026020010181815250507f7c2d5f79f87d2ebb0923347996bb8931b1e01cf9ff71b3e74175f9e8a068c683888c61015f54848e8e60405161119f969594939291906128e2565b60405180910390a15050505050505050505050565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b031633146111f95760405162461bcd60e51b81526004016105ce91906127a0565b50600061120560cb5490565b611210906001612982565b90506127118110604051806040016040528060028152602001610c8d60f21b815250906112505760405162461bcd60e51b81526004016105ce91906127a0565b5061125b8382611b83565b604080518082018252600080825260208083018281528583526101618252848320600180855292529390912082518155925183820180549394939192909160ff1916908360038111156112b0576112b0612a6b565b0217905550905050604051806040016040528060008152602001600060038111156112dd576112dd612a6b565b90526000828152610161602052604081209060038152602080820192909252604001600020825181559082015160018083018054909160ff199091169083600381111561132c5761132c612a6b565b02179055509050506040518060400160405280600081526020016000600381111561135957611359612a6b565b9052600082815261016160209081526040808320600684528252909120825181559082015160018083018054909160ff19909116908360038111156113a0576113a0612a6b565b0217905550905050604051806040016040528060008152602001600060038111156113cd576113cd612a6b565b9052600082815261016160209081526040808320600284528252909120825181559082015160018083018054909160ff199091169083600381111561141457611414612a6b565b02179055509050506040518060400160405280600081526020016000600381111561144157611441612a6b565b9052600082815261016160209081526040808320600584528252909120825181559082015160018083018054909160ff199091169083600381111561148857611488612a6b565b0217905550905050604051806040016040528060008152602001600060038111156114b5576114b5612a6b565b9052600082815261016160209081526040808320600484528252909120825181559082015160018083018054909160ff19909116908360038111156114fc576114fc612a6b565b02179055505061015f54604080518481526001600160a01b038716602082015290810191909152606081018490527f96a35b632e852ba2203cd789f452e1772166012885d056fef2ef736112b0fdb69150608001610bec565b606061156082611692565b600061157760408051602081019091526000815290565b9050600081511161159757604051806020016040528060008152506115c2565b806115a184611c52565b6040516020016115b2929190612734565b6040516020818303038152906040525b9392505050565b6115d16119d5565b6001600160a01b0381166116365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105ce565b61163f81611a2f565b50565b60006001600160e01b031982166380ac58cd60e01b148061167357506001600160e01b03198216635b5e139f60e01b145b8061049a57506301ffc9a760e01b6001600160e01b031983161461049a565b6000818152609960205260409020546001600160a01b031661163f5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016105ce565b6000818152609b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061172682610a13565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600054610100900460ff166117865760405162461bcd60e51b81526004016105ce90612897565b610c138282611cef565b600054610100900460ff16610b0b5760405162461bcd60e51b81526004016105ce90612897565b600054610100900460ff166117de5760405162461bcd60e51b81526004016105ce90612897565b610b0b611d3d565b6000806117f283610a13565b9050806001600160a01b0316846001600160a01b0316148061183957506001600160a01b038082166000908152609c602090815260408083209388168352929052205460ff165b8061067d5750836001600160a01b031661185284610532565b6001600160a01b031614949350505050565b826001600160a01b031661187782610a13565b6001600160a01b03161461189d5760405162461bcd60e51b81526004016105ce90612852565b6001600160a01b0382166118ff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016105ce565b61190c8383836001611d6d565b826001600160a01b031661191f82610a13565b6001600160a01b0316146119455760405162461bcd60e51b81526004016105ce90612852565b6000818152609b6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609a8552838620805460001901905590871680865283862080546001019055868652609990945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6033546001600160a01b03163314610b0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016105ce565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611ae35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016105ce565b6001600160a01b038381166000818152609c6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b5b848484611864565b611b6784848484611ea1565b6108535760405162461bcd60e51b81526004016105ce90612800565b610c13828260405180602001604052806000815250611fab565b610162805460009182611baf83612a18565b90915550600090506103e8611bc560014361299a565b610162546040805192406020840152820187905260608201869052608082015260a0016040516020818303038152906040528051906020012060001c611c0b9190612a33565b905061030c811015611c205760009150611c4b565b6103d4811015611c335760019150611c4b565b6103e6811015611c465760029150611c4b565b600391505b5092915050565b60606000611c5f83611fde565b600101905060008167ffffffffffffffff811115611c7f57611c7f612aad565b6040519080825280601f01601f191660200182016040528015611ca9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611ce257611ce7565b611cb3565b509392505050565b600054610100900460ff16611d165760405162461bcd60e51b81526004016105ce90612897565b8151611d299060979060208501906123df565b50805161066f9060989060208401906123df565b600054610100900460ff16611d645760405162461bcd60e51b81526004016105ce90612897565b610b0b33611a2f565b6001811115611ddc5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016105ce565b816001600160a01b038516611e3857611e338160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b611e5b565b836001600160a01b0316856001600160a01b031614611e5b57611e5b85826120b6565b6001600160a01b038416611e7757611e7281612153565b611e9a565b846001600160a01b0316846001600160a01b031614611e9a57611e9a8482612202565b5050505050565b60006001600160a01b0384163b15611fa357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611ee5903390899088908890600401612763565b602060405180830381600087803b158015611eff57600080fd5b505af1925050508015611f2f575060408051601f3d908101601f19168201909252611f2c918101906126b0565b60015b611f89573d808015611f5d576040519150601f19603f3d011682016040523d82523d6000602084013e611f62565b606091505b508051611f815760405162461bcd60e51b81526004016105ce90612800565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061067d565b50600161067d565b611fb58383612246565b611fc26000848484611ea1565b61066f5760405162461bcd60e51b81526004016105ce90612800565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061201d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612049576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061206757662386f26fc10000830492506010015b6305f5e100831061207f576305f5e100830492506008015b612710831061209357612710830492506004015b606483106120a5576064830492506002015b600a831061049a5760010192915050565b600060016120c384610a73565b6120cd919061299a565b600083815260ca6020526040902054909150808214612120576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb546000906121659060019061299a565b600083815260cc602052604081205460cb805493945090928490811061218d5761218d612a97565b906000526020600020015490508060cb83815481106121ae576121ae612a97565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb8054806121e6576121e6612a81565b6001900381819060005260206000200160009055905550505050565b600061220d83610a73565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b6001600160a01b03821661229c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016105ce565b6000818152609960205260409020546001600160a01b0316156123015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ce565b61230f600083836001611d6d565b6000818152609960205260409020546001600160a01b0316156123745760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016105ce565b6001600160a01b0382166000818152609a6020908152604080832080546001019055848352609990915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546123eb906129dd565b90600052602060002090601f01602090048101928261240d5760008555612453565b82601f1061242657805160ff1916838001178555612453565b82800160010185558215612453579182015b82811115612453578251825591602001919060010190612438565b5061245f929150612463565b5090565b5b8082111561245f5760008155600101612464565b80356001600160a01b038116811461248f57600080fd5b919050565b6000602082840312156124a657600080fd5b6115c282612478565b600080604083850312156124c257600080fd5b6124cb83612478565b91506124d960208401612478565b90509250929050565b6000806000606084860312156124f757600080fd5b61250084612478565b925061250e60208501612478565b9150604084013590509250925092565b6000806000806080858703121561253457600080fd5b61253d85612478565b935061254b60208601612478565b925060408501359150606085013567ffffffffffffffff8082111561256f57600080fd5b818701915087601f83011261258357600080fd5b81358181111561259557612595612aad565b604051601f8201601f19908116603f011681019083821181831017156125bd576125bd612aad565b816040528281528a60208487010111156125d657600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561260d57600080fd5b61261683612478565b91506020830135801515811461262b57600080fd5b809150509250929050565b6000806040838503121561264957600080fd5b61265283612478565b946020939093013593505050565b60008060006060848603121561267557600080fd5b61267e84612478565b95602085013595506040909401359392505050565b6000602082840312156126a557600080fd5b81356115c281612ac3565b6000602082840312156126c257600080fd5b81516115c281612ac3565b6000602082840312156126df57600080fd5b5035919050565b600080604083850312156126f957600080fd5b50508035926020909101359150565b600081518084526127208160208601602086016129b1565b601f01601f19169290920160200192915050565b600083516127468184602088016129b1565b83519083019061275a8183602088016129b1565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061279690830184612708565b9695505050505050565b6020815260006115c26020830184612708565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060c08201888352602060018060a01b0389168185015287604085015260c0606085015281875180845260e086019150828901935060005b818110156129375784518352938301939183019160010161291b565b5050608085019690965250505060a00152949350505050565b828152604081016004831061297557634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b6000821982111561299557612995612a55565b500190565b6000828210156129ac576129ac612a55565b500390565b60005b838110156129cc5781810151838201526020016129b4565b838111156108535750506000910152565b600181811c908216806129f157607f821691505b60208210811415612a1257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a2c57612a2c612a55565b5060010190565b600082612a5057634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461163f57600080fdfea164736f6c6343000807000a608060405234801561001057600080fd5b506040516104a43803806104a483398101604081905261002f916101a9565b61003833610063565b600180546001600160a01b0319166001600160a01b03831617905561005c826100b3565b50506101dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100bb610131565b6001600160a01b0381166101255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61012e81610063565b50565b6000546001600160a01b0316331461018b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161011c565b565b80516001600160a01b03811681146101a457600080fd5b919050565b600080604083850312156101bc57600080fd5b6101c58361018d565b91506101d36020840161018d565b90509250929050565b6102b9806101eb6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80635c60da1b14610067578063715018a61461009057806383f94db71461009a5780638abf6077146100ad5780638da5cb5b146100c0578063f2fde38b146100d1575b600080fd5b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100986100e4565b005b6100986100a836600461027c565b6100f8565b600154610074906001600160a01b031681565b6000546001600160a01b0316610074565b6100986100df36600461027c565b610154565b6100ec6101d2565b6100f6600061022c565b565b6101006101d2565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f0c65c15069eef1867f8f7c89529adb4082e479e1cbd4027d34d94d5f7ba2bc0d9060200160405180910390a150565b61015c6101d2565b6001600160a01b0381166101c65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6101cf8161022c565b50565b6000546001600160a01b031633146100f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101bd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561028e57600080fd5b81356001600160a01b03811681146102a557600080fd5b939250505056fea164736f6c6343000807000a6080604052600680546001600160a81b03191674b980d88ae1e9599096e6030fb5381483e4312f31011790553480156200003857600080fd5b5060405162001ad738038062001ad78339810160408190526200005b91620002ca565b825183908390620000749060039060208501906200016d565b5080516200008a9060049060208401906200016d565b505050620000bf7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177582620000c860201b60201c565b505050620003aa565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620001695760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001283390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b8280546200017b9062000357565b90600052602060002090601f0160209004810192826200019f5760008555620001ea565b82601f10620001ba57805160ff1916838001178555620001ea565b82800160010185558215620001ea579182015b82811115620001ea578251825591602001919060010190620001cd565b50620001f8929150620001fc565b5090565b5b80821115620001f85760008155600101620001fd565b600082601f8301126200022557600080fd5b81516001600160401b038082111562000242576200024262000394565b604051601f8301601f19908116603f011681019082821181831017156200026d576200026d62000394565b816040528381526020925086838588010111156200028a57600080fd5b600091505b83821015620002ae57858201830151818301840152908201906200028f565b83821115620002c05760008385830101525b9695505050505050565b600080600060608486031215620002e057600080fd5b83516001600160401b0380821115620002f857600080fd5b620003068783880162000213565b945060208601519150808211156200031d57600080fd5b506200032c8682870162000213565b604086015190935090506001600160a01b03811681146200034c57600080fd5b809150509250925092565b600181811c908216806200036c57607f821691505b602082108114156200038e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61171d80620003ba6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806375b238fc116100de578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e14610378578063e467f7e01461038b578063ec2de4611461039e578063ed27d503146103b157600080fd5b8063a9059cbb1461033f578063c68c867414610352578063d547741f1461036557600080fd5b806375b238fc146102e157806379cc6790146102f657806391d148541461030957806395d89b411461031c578063a217fddf14610324578063a457c2d71461032c57600080fd5b80632f2ff15d1161014b5780633950935111610125578063395093511461026257806342966c6814610275578063444784251461028857806370a08231146102b857600080fd5b80632f2ff15d1461022b578063313ce5671461024057806336568abe1461024f57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063095ea7b3146101d057806318160ddd146101e357806323b872dd146101f5578063248a9ca314610208575b600080fd5b6101a66101a1366004611440565b6103be565b60405190151581526020015b60405180910390f35b6101c36103f5565b6040516101b29190611556565b6101a66101de3660046112f8565b610487565b6002545b6040519081526020016101b2565b6101a6610203366004611292565b61049f565b6101e7610216366004611404565b60009081526005602052604090206001015490565b61023e61023936600461141d565b6104c3565b005b604051601281526020016101b2565b61023e61025d36600461141d565b6104ed565b6101a66102703660046112f8565b610570565b61023e610283366004611404565b610592565b6006546102a09061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101b2565b6101e76102c6366004611244565b6001600160a01b031660009081526020819052604090205490565b6101e76000805160206116f183398151915281565b61023e6103043660046112f8565b61059f565b6101a661031736600461141d565b6105b4565b6101c36105df565b6101e7600081565b6101a661033a3660046112f8565b6105ee565b6101a661034d3660046112f8565b610669565b61023e6103603660046113e9565b610677565b61023e61037336600461141d565b6106d7565b6101e761038636600461125f565b6106fc565b6101e7610399366004611322565b610727565b61023e6103ac3660046112ce565b610849565b6006546101a69060ff1681565b60006001600160e01b03198216637965db0b60e01b14806103ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461040490611658565b80601f016020809104026020016040519081016040528092919081815260200182805461043090611658565b801561047d5780601f106104525761010080835404028352916020019161047d565b820191906000526020600020905b81548152906001019060200180831161046057829003601f168201915b5050505050905090565b600033610495818585610905565b5060019392505050565b6000336104ad858285610a29565b6104b8858585610aa3565b506001949350505050565b6000828152600560205260409020600101546104de81610b0c565b6104e88383610b16565b505050565b6001600160a01b03811633146105625760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61056c8282610b9c565b5050565b60003361049581858561058383836106fc565b61058d91906115de565b610905565b61059c3382610c03565b50565b6105aa823383610a29565b61056c8282610c03565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606004805461040490611658565b600033816105fc82866106fc565b90508381101561065c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610559565b6104b88286868403610905565b600033610495818585610aa3565b6000805160206116f183398151915261068f81610b0c565b6006805460ff19168315159081179091556040519081527f14dbadb279b22e30eb0f9552f2a2a4a5df323ada0f85fb4a0c7bb28033f8808d9060200160405180910390a15050565b6000828152600560205260409020600101546106f281610b0c565b6104e88383610b9c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006000805160206116f183398151915261074181610b0c565b600083518551146107865760405162461bcd60e51b815260206004820152600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606401610559565b60005b8551811015610807576107ce8682815181106107a7576107a76116c4565b60200260200101518683815181106107c1576107c16116c4565b6020026020010151610d35565b8481815181106107e0576107e06116c4565b6020026020010151826107f391906115de565b9150806107ff81611693565b915050610789565b7f9c7afe195f3f9de44103d553253dcc8807c36b1f4987e79c89d4cc8d75f58a3f86866040516108389291906114df565b60405180910390a150949350505050565b6000805160206116f183398151915261086181610b0c565b6001600160a01b03831660009081526007602052604090205460ff16151582151514156108a15760405163a741a04560e01b815260040160405180910390fd5b6001600160a01b038316600081815260076020908152604091829020805460ff19168615159081179091558251938452908301527f31029d32201084b6ba7cb86c06f537905d234c89d6bf887565758f964a85ce69910160405180910390a1505050565b6001600160a01b0383166109675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610559565b6001600160a01b0382166109c85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610559565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610a3584846106fc565b90506000198114610a9d5781811015610a905760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610559565b610a9d8484848403610905565b50505050565b60065460ff1615610b01576006546001600160a01b038381166101009092041614610b01576001600160a01b03831660009081526007602052604090205460ff16610b015760405163b38b76f160e01b815260040160405180910390fd5b6104e8838383610df4565b61059c8133610f98565b610b2082826105b4565b61056c5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610b583390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610ba682826105b4565b1561056c5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038216610c635760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610559565b6001600160a01b03821660009081526020819052604090205481811015610cd75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610559565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b038216610d8b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610559565b8060026000828254610d9d91906115de565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038316610e585760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610559565b6001600160a01b038216610eba5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610559565b6001600160a01b03831660009081526020819052604090205481811015610f325760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610559565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a9d565b610fa282826105b4565b61056c57610faf81610ff1565b610fba836020611003565b604051602001610fcb92919061146a565b60408051601f198184030181529082905262461bcd60e51b825261055991600401611556565b60606103ef6001600160a01b03831660145b606060006110128360026115f6565b61101d9060026115de565b67ffffffffffffffff811115611035576110356116da565b6040519080825280601f01601f19166020018201604052801561105f576020820181803683370190505b509050600360fc1b8160008151811061107a5761107a6116c4565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106110a9576110a96116c4565b60200101906001600160f81b031916908160001a90535060006110cd8460026115f6565b6110d89060016115de565b90505b6001811115611150576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061110c5761110c6116c4565b1a60f81b828281518110611122576111226116c4565b60200101906001600160f81b031916908160001a90535060049490941c9361114981611641565b90506110db565b50831561119f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610559565b9392505050565b80356001600160a01b03811681146111bd57600080fd5b919050565b600082601f8301126111d357600080fd5b813560206111e86111e3836115ba565b611589565b80838252828201915082860187848660051b890101111561120857600080fd5b60005b858110156112275781358452928401929084019060010161120b565b5090979650505050505050565b803580151581146111bd57600080fd5b60006020828403121561125657600080fd5b61119f826111a6565b6000806040838503121561127257600080fd5b61127b836111a6565b9150611289602084016111a6565b90509250929050565b6000806000606084860312156112a757600080fd5b6112b0846111a6565b92506112be602085016111a6565b9150604084013590509250925092565b600080604083850312156112e157600080fd5b6112ea836111a6565b915061128960208401611234565b6000806040838503121561130b57600080fd5b611314836111a6565b946020939093013593505050565b6000806040838503121561133557600080fd5b823567ffffffffffffffff8082111561134d57600080fd5b818501915085601f83011261136157600080fd5b813560206113716111e3836115ba565b8083825282820191508286018a848660051b890101111561139157600080fd5b600096505b848710156113bb576113a7816111a6565b835260019690960195918301918301611396565b50965050860135925050808211156113d257600080fd5b506113df858286016111c2565b9150509250929050565b6000602082840312156113fb57600080fd5b61119f82611234565b60006020828403121561141657600080fd5b5035919050565b6000806040838503121561143057600080fd5b82359150611289602084016111a6565b60006020828403121561145257600080fd5b81356001600160e01b03198116811461119f57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516114a2816017850160208801611615565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516114d3816028840160208801611615565b01602801949350505050565b604080825283519082018190526000906020906060840190828701845b828110156115215781516001600160a01b0316845292840192908401906001016114fc565b5050508381038285015284518082528583019183019060005b818110156112275783518352928401929184019160010161153a565b6020815260008251806020840152611575816040850160208701611615565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff811182821017156115b2576115b26116da565b604052919050565b600067ffffffffffffffff8211156115d4576115d46116da565b5060051b60200190565b600082198211156115f1576115f16116ae565b500190565b6000816000190483118215151615611610576116106116ae565b500290565b60005b83811015611630578181015183820152602001611618565b83811115610a9d5750506000910152565b600081611650576116506116ae565b506000190190565b600181811c9082168061166c57607f821691505b6020821081141561168d57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156116a7576116a76116ae565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a164736f6c6343000807000a608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611980806100ec6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806379cc679011610130578063ba0bba40116100b8578063dd62ed3e1161007c578063dd62ed3e1461045e578063e5e31b1314610471578063ee2ab33214610494578063f2fde38b1461049d578063f59f4574146104b057600080fd5b8063ba0bba4014610414578063bf3308de1461041c578063c3ae700e14610425578063cca0feb614610438578063d46980161461044b57600080fd5b806395d89b41116100ff57806395d89b41146103d45780639e7d8d1d146103dc578063a457c2d7146103e5578063a9059cbb146103f8578063b079c4d71461040b57600080fd5b806379cc67901461039e5780637f4299a9146103b15780638a2381d7146103ba5780638da5cb5b146103c357600080fd5b806342966c68116101b35780636df91bbb116101825780636df91bbb1461034957806370a0823114610351578063715018a61461037a57806374c9f60314610382578063773b3a931461039557600080fd5b806342966c6814610305578063485cc9551461031a57806350a8945d1461032d5780635e4887bd1461034057600080fd5b806323b872dd116101fa57806323b872dd146102aa5780632dc0562d146102bd578063313ce567146102d057806336b19cd7146102df57806339509351146102f257600080fd5b806306fdde031461022c578063095ea7b31461024a57806318160ddd1461026d5780631a012f481461027f575b600080fd5b6102346104b8565b6040516102419190611804565b60405180910390f35b61025d6102583660046117a4565b61054a565b6040519015158152602001610241565b6035545b604051908152602001610241565b60d254610292906001600160a01b031681565b6040516001600160a01b039091168152602001610241565b61025d6102b8366004611731565b610562565b60ca54610292906001600160a01b031681565b60405160128152602001610241565b60d054610292906001600160a01b031681565b61025d6103003660046117a4565b610586565b6103186103133660046117eb565b6105a8565b005b6103186103283660046116fe565b6105b5565b61031861033b36600461176d565b610779565b61027160d55481565b6102716107e5565b61027161035f3660046116dc565b6001600160a01b031660009081526033602052604090205490565b61031861083a565b6103186103903660046116dc565b61084e565b61027160cd5481565b6103186103ac3660046117a4565b6108d2565b61027160cc5481565b61027160cf5481565b6097546001600160a01b0316610292565b6102346108eb565b61027160c95481565b61025d6103f33660046117a4565b6108fa565b61025d6104063660046117a4565b610975565b61027160d65481565b610318610983565b61027160cb5481565b61031861043336600461176d565b610a76565b6103186104463660046117eb565b610b01565b60d154610292906001600160a01b031681565b61027161046c3660046116fe565b610b63565b61025d61047f3660046116dc565b60d36020526000908152604090205460ff1681565b61027160ce5481565b6103186104ab3660046116dc565b610b8e565b610318610c04565b6060603680546104c790611914565b80601f01602080910402602001604051908101604052809291908181526020018280546104f390611914565b80156105405780601f1061051557610100808354040283529160200191610540565b820191906000526020600020905b81548152906001019060200180831161052357829003601f168201915b5050505050905090565b600033610558818585610d0a565b5060019392505050565b600033610570858285610e2e565b61057b858585610ea8565b506001949350505050565b6000336105588185856105998383610b63565b6105a391906118a4565b610d0a565b6105b23382611066565b50565b600054610100900460ff16158080156105d55750600054600160ff909116105b806105ef5750303b1580156105ef575060005460ff166001145b6106575760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561067a576000805461ff0019166101001790555b6001600160a01b038316158061069757506001600160a01b038216155b156106b55760405163f8b7150760e01b815260040160405180910390fd5b6106f56040518060400160405280600381526020016205541560ec1b8152506040518060400160405280600381526020016205541560ec1b81525061119a565b6106fd6111cb565b6107056111f2565b61070e83610b8e565b60ca80546001600160a01b0319166001600160a01b038416179055600a60c9558015610774576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610781611221565b6001600160a01b038216600081815260d46020908152604091829020805460ff19168515159081179091558251938452908301527f688d32022f6d446e0bc6e798c809442a0610259fec6679c02bbbb43bd5ab1de391015b60405180910390a15050565b60008062784ce060d554426107fa91906118fd565b61080491906118bc565b9050600061081e826b087b595f2383509fe10000006118de565b905060cd54811161082f5780610833565b60cd545b9250505090565b610842611221565b61084c600061127b565b565b610856611221565b6001600160a01b03811661087d5760405163f8b7150760e01b815260040160405180910390fd5b60ca80546001600160a01b0319166001600160a01b0383169081179091556040519081527fe809fa0c811040b61000c05b031840776748942548895c25aaa593062063e700906020015b60405180910390a150565b6108dd823383610e2e565b6108e78282611066565b5050565b6060603780546104c790611914565b600033816109088286610b63565b9050838110156109685760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161064e565b61057b8286868403610d0a565b600033610558818585610ea8565b60d75460ff16156109a65760405162dc149f60e41b815260040160405180910390fd5b4260d5556c02a68bedbb190931f65000000060cb556c015345f6dd8c8498fb2800000060cc556b43dacaf91c1a84ff0800000060cd8190556bcb9060eb544f8efd1800000060ce5560cf5560d080546001600160a01b031990811673bc67629883fbdf808acbfc1fcc608b757be9d3781790915560d18054821673e73dea1340aeca4aa979438c9950ddfb28de626c17905560d280549091167320a2968eefc8c89aa7b2bb14bf76e22146d6b876179055610a5f6112cd565b610a67611331565b60d7805460ff19166001179055565b610a7e611221565b6001600160a01b038216610aa5576040516352f525d960e11b815260040160405180910390fd5b6001600160a01b038216600081815260d36020908152604091829020805460ff19168515159081179091558251938452908301527f17af727a114eccd5fb319c94971047e772ad0b00713fdf56b932d1864826088491016107d9565b610b09611221565b6064811115610b2e57604051635066767360e01b81526004810182905260240161064e565b60c98190556040518181527f4c11aaf71c678301c05b2797f5fb05e11ec872fdde924fb029b73f1489615474906020016108c7565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b610b96611221565b6001600160a01b038116610bfb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064e565b6105b28161127b565b610c0c611221565b6000610c166107e5565b9050600060d65482610c2891906118fd565b60d05460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101829052909150309063a9059cbb90604401602060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caf91906117ce565b508060d66000828254610cc291906118a4565b909155505060d054604080516001600160a01b039092168252602082018390527facc15b433ff2864bbd0574129f1589394c1bbbbcd49a7daed63a8147522355e891016107d9565b6001600160a01b038316610d6c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161064e565b6001600160a01b038216610dcd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161064e565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610e3a8484610b63565b90506000198114610ea25781811015610e955760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161064e565b610ea28484848403610d0a565b50505050565b6000610ebc6097546001600160a01b031690565b6001600160a01b0316846001600160a01b031614158015610eeb57506097546001600160a01b03848116911614155b15610fd1576001600160a01b038416600090815260d4602052604090205460ff16158015610f3257506001600160a01b038316600090815260d4602052604090205460ff16155b610f7e5760405162461bcd60e51b815260206004820152601f60248201527f4d616c6963696f757320426f74205472616e7366657220646574656374656400604482015260640161064e565b6001600160a01b038316600090815260d3602052604090205460ff168015610faf57506001600160a01b0384163014155b15610fd157606460c95483610fc491906118de565b610fce91906118bc565b90505b80610fe657610fe184848461133d565b610ea2565b610ffa8484610ff584866118fd565b61133d565b60ca546110129085906001600160a01b03168361133d565b60ca54604080516001600160a01b038088168252909216602083015281018290527f19f82c103043a90796cd642d0fcb4963c39de3b7509c4c11394bb0997f9112389060600160405180910390a150505050565b6001600160a01b0382166110c65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161064e565b6001600160a01b0382166000908152603360205260409020548181101561113a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161064e565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600054610100900460ff166111c15760405162461bcd60e51b815260040161064e90611859565b6108e782826114e8565b600054610100900460ff1661084c5760405162461bcd60e51b815260040161064e90611859565b600054610100900460ff166112195760405162461bcd60e51b815260040161064e90611859565b61084c611536565b6097546001600160a01b0316331461084c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161064e565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60d05460cb546112e6916001600160a01b031690611566565b60d15460cc546112ff916001600160a01b031690611566565b60d05460ce54611318916001600160a01b031690611566565b60d05460cf5461084c916001600160a01b031690611566565b61084c3060cd54611566565b6001600160a01b0383166113a15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161064e565b6001600160a01b0382166114035760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161064e565b6001600160a01b0383166000908152603360205260409020548181101561147b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161064e565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114db9086815260200190565b60405180910390a3610ea2565b600054610100900460ff1661150f5760405162461bcd60e51b815260040161064e90611859565b8151611522906036906020850190611627565b508051610774906037906020840190611627565b600054610100900460ff1661155d5760405162461bcd60e51b815260040161064e90611859565b61084c3361127b565b6001600160a01b0382166115bc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161064e565b80603560008282546115ce91906118a4565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b82805461163390611914565b90600052602060002090601f016020900481019282611655576000855561169b565b82601f1061166e57805160ff191683800117855561169b565b8280016001018555821561169b579182015b8281111561169b578251825591602001919060010190611680565b506116a79291506116ab565b5090565b5b808211156116a757600081556001016116ac565b80356001600160a01b03811681146116d757600080fd5b919050565b6000602082840312156116ee57600080fd5b6116f7826116c0565b9392505050565b6000806040838503121561171157600080fd5b61171a836116c0565b9150611728602084016116c0565b90509250929050565b60008060006060848603121561174657600080fd5b61174f846116c0565b925061175d602085016116c0565b9150604084013590509250925092565b6000806040838503121561178057600080fd5b611789836116c0565b9150602083013561179981611965565b809150509250929050565b600080604083850312156117b757600080fd5b6117c0836116c0565b946020939093013593505050565b6000602082840312156117e057600080fd5b81516116f781611965565b6000602082840312156117fd57600080fd5b5035919050565b600060208083528351808285015260005b8181101561183157858101830151858201604001528201611815565b81811115611843576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082198211156118b7576118b761194f565b500190565b6000826118d957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156118f8576118f861194f565b500290565b60008282101561190f5761190f61194f565b500390565b600181811c9082168061192857607f821691505b6020821081141561194957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80151581146105b257600080fdfea164736f6c6343000807000a608060405260405162000eb138038062000eb1833981016040819052620000269162000458565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001791760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e8a60279139620002f8565b9392505050565b60006200018060008051602062000e6a83398151915260001b6200037760201b620001a51760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e6a83398151915260001b6200037760201b620001a51760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001a81760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001a51760201c565b6060600080856001600160a01b03168560405162000317919062000538565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000556565b80516001600160a01b03811681146200045357600080fd5b919050565b6000806000606084860312156200046e57600080fd5b62000479846200043b565b925062000489602085016200043b565b60408501519092506001600160401b0380821115620004a757600080fd5b818601915086601f830112620004bc57600080fd5b815181811115620004d157620004d1620005ba565b604051601f8201601f19908116603f01168101908382118183101715620004fc57620004fc620005ba565b816040528281528960208487010111156200051657600080fd5b620005298360208301602088016200058b565b80955050505050509250925092565b600082516200054c8184602087016200058b565b9190910192915050565b6020815260008251806020840152620005778160408501602087016200058b565b601f01601f19169190910160400192915050565b60005b83811015620005a85781810151838201526020016200058e565b83811115620000835750506000910152565b634e487b7160e01b600052604160045260246000fd5b61088a80620005e06000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101b7565b6001600160a01b0316336001600160a01b0316141561016f5760606001600160e01b031960003516631b2ce7f360e11b8114156100655761005e6101ea565b9150610167565b6001600160e01b0319811663278f794360e11b14156100865761005e610241565b6001600160e01b031981166308f2839760e41b14156100a75761005e610287565b6001600160e01b031981166303e1469160e61b14156100c85761005e6102b8565b6001600160e01b03198116635c60da1b60e01b14156100e95761005e6102f8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b61017761030c565b565b606061019e83836040518060600160405280602781526020016108576027913961031c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101f4610394565b600061020336600481846107ea565b81019061021091906106be565b905061022d8160405180602001604052806000815250600061039f565b505060408051602081019091526000815290565b606060008061025336600481846107ea565b81019061026091906106d9565b915091506102708282600161039f565b604051806020016040528060008152509250505090565b6060610291610394565b60006102a036600481846107ea565b8101906102ad91906106be565b905061022d816103cb565b60606102c2610394565b60006102cc6101b7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b6060610302610394565b60006102cc610422565b610177610317610422565b610431565b6060600080856001600160a01b031685604051610339919061079b565b600060405180830381855af49150503d8060008114610374576040519150601f19603f3d011682016040523d82523d6000602084013e610379565b606091505b509150915061038a86838387610455565b9695505050505050565b341561017757600080fd5b6103a8836104d3565b6000825111806103b55750805b156103c6576103c48383610179565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103f46101b7565b604080516001600160a01b03928316815291841660208301520160405180910390a161041f81610513565b50565b600061042c6105bc565b905090565b3660008037600080366000845af43d6000803e808015610450573d6000f35b3d6000fd5b606083156104c15782516104ba576001600160a01b0385163b6104ba5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161015e565b50816104cb565b6104cb83836105e4565b949350505050565b6104dc8161060e565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105785760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161015e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101db565b8151156105f45781518083602001fd5b8060405162461bcd60e51b815260040161015e91906107b7565b6001600160a01b0381163b61067b5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161015e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61059b565b80356001600160a01b03811681146106b957600080fd5b919050565b6000602082840312156106d057600080fd5b61019e826106a2565b600080604083850312156106ec57600080fd5b6106f5836106a2565b9150602083013567ffffffffffffffff8082111561071257600080fd5b818501915085601f83011261072657600080fd5b81358181111561073857610738610840565b604051601f8201601f19908116603f0116810190838211818310171561076057610760610840565b8160405282815288602084870101111561077957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600082516107ad818460208701610814565b9190910192915050565b60208152600082518060208401526107d6816040850160208701610814565b601f01601f19169190910160400192915050565b600080858511156107fa57600080fd5b8386111561080757600080fd5b5050820193919092039150565b60005b8381101561082f578181015183820152602001610817565b838111156103c45750506000910152565b634e487b7160e01b600052604160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000807000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6156b980620000f36000396000f3fe6080604052600436106200047f5760003560e01c80637a5e1c181162000257578063b8b6f0751162000147578063d1bb5cf111620000c5578063df2eee191162000084578063df2eee191462000e16578063e562dfd91462000e2e578063ed6943141462000e46578063fc7b15d21462000e5e578063fd53f53b1462000e8357600080fd5b8063d1bb5cf11462000d7e578063d547741f1462000da0578063d72b11bd1462000dc5578063dbd2cb691462000de7578063ddb42a721462000dff57600080fd5b8063c6cc51d31162000112578063c6cc51d31462000cd0578063c6d9cfcc1462000cf5578063c8a131891462000d29578063d0ffc9b81462000d41578063d1b5c6431462000d5957600080fd5b8063b8b6f0751462000c56578063bc39a82f1462000c7b578063bc79daeb1462000ca0578063c08b3aa01462000cb857600080fd5b806391d1485411620001d5578063a9d600cd11620001a0578063a9d600cd1462000bc4578063b04668631462000bdc578063b1c9fe6e1462000bf4578063b47cc5561462000c0c578063b62d08d41462000c3157600080fd5b806391d148541462000b415780639ab4a4451462000b66578063a217fddf1462000b88578063a424c7831462000b9f57600080fd5b8063847d34fb1162000222578063847d34fb1462000a6b5780638825213f1462000a835780638d1516e91462000ac25780638d94e5e91462000af65780638d9c39711462000b1b57600080fd5b80637a5e1c1814620009e85780637d5aa5f41462000a0d5780637f9bb0721462000a2f578063816629c71462000a5457600080fd5b806336f9567011620003735780634d3f9d3e11620002f1578063628b37c711620002bc578063628b37c7146200094f578063628c75d01462000974578063657128c2146200098c57806365d65e8614620009a45780636bb7527214620009c657600080fd5b80634d3f9d3e14620008be57806351cff8d914620008e3578063562429bc14620009085780636213b727146200092a57600080fd5b806341cb87fc116200033e57806341cb87fc146200082557806344478425146200084a578063467150ee146200086c5780634ac0ab1c14620008845780634c4cbca5146200089c57600080fd5b806336f956701462000786578063389fa61514620007ab5780633ca7b4ea14620007e85780633e032a3b146200080d57600080fd5b806327c1c94a11620004015780632f2ff15d11620003cc5780632f2ff15d14620006c157806331f20de814620006e6578063334672c1146200071757806335460670146200073c57806336568abe146200076157600080fd5b806327c1c94a146200063a5780632b6b5052146200065f5780632cc8265514620006845780632eb4a7ab14620006a957600080fd5b80630bb4d82a116200044e5780630bb4d82a1462000560578063142f25a9146200059a5780631551fbc414620005bf57806321b7e5e614620005e4578063248a9ca3146200060657600080fd5b806301ffc9a714620004845780630417678214620004be5780630505b2b414620004fe578063062287491462000525575b600080fd5b3480156200049157600080fd5b50620004a9620004a336600462004866565b62000ea5565b60405190151581526020015b60405180910390f35b348015620004cb57600080fd5b50620004ef620004dd366004620045f8565b60e86020526000908152604090205481565b604051908152602001620004b5565b3480156200050b57600080fd5b50620005236200051d366004620045f8565b62000edd565b005b3480156200053257600080fd5b5060e15462000547906001600160a01b031681565b6040516001600160a01b039091168152602001620004b5565b3480156200056d57600080fd5b50620005476200057f36600462004819565b60dd602052600090815260409020546001600160a01b031681565b348015620005a757600080fd5b5062000523620005b9366004620049a2565b62000f6e565b348015620005cc57600080fd5b5062000523620005de36600462004719565b6200102d565b348015620005f157600080fd5b5060d55462000547906001600160a01b031681565b3480156200061357600080fd5b50620004ef6200062536600462004819565b60009081526065602052604090206001015490565b3480156200064757600080fd5b50620005236200065936600462004819565b6200130b565b3480156200066c57600080fd5b50620005236200067e366004620045f8565b6200134e565b3480156200069157600080fd5b5062000523620006a336600462004819565b620013d8565b348015620006b657600080fd5b50620004ef60e05481565b348015620006ce57600080fd5b5062000523620006e036600462004833565b6200141b565b348015620006f357600080fd5b50620004ef62000705366004620045f8565b60ea6020526000908152604090205481565b3480156200072457600080fd5b50620005236200073636600462004819565b62001449565b3480156200074957600080fd5b50620005236200075b366004620049a2565b6200149a565b3480156200076e57600080fd5b50620005236200078036600462004833565b620016e6565b3480156200079357600080fd5b5062000523620007a5366004620045f8565b62001764565b348015620007b857600080fd5b50620004a9620007ca366004620045f8565b6001600160a01b0316600090815260de602052604090205460ff1690565b348015620007f557600080fd5b50620005236200080736600462004819565b620017e8565b3480156200081a57600080fd5b50620004ef60e75481565b3480156200083257600080fd5b506200052362000844366004620045f8565b6200182b565b3480156200085757600080fd5b5060e35462000547906001600160a01b031681565b3480156200087957600080fd5b50620004ef60d35481565b3480156200089157600080fd5b50620004ef60d75481565b348015620008a957600080fd5b5060cb5462000547906001600160a01b031681565b348015620008cb57600080fd5b5062000523620008dd36600462004638565b6200185b565b348015620008f057600080fd5b506200052362000902366004620045f8565b62001995565b3480156200091557600080fd5b5060cd5462000547906001600160a01b031681565b3480156200093757600080fd5b5062000523620009493660046200468a565b620019ed565b3480156200095c57600080fd5b50620005236200096e366004620045f8565b62001d1a565b3480156200098157600080fd5b50620004ef60d05481565b3480156200099957600080fd5b50620004ef60db5481565b348015620009b157600080fd5b5060c95462000547906001600160a01b031681565b348015620009d357600080fd5b5060ce5462000547906001600160a01b031681565b348015620009f557600080fd5b506200052362000a0736600462004819565b62001d9e565b34801562000a1a57600080fd5b5060e45462000547906001600160a01b031681565b34801562000a3c57600080fd5b506200052362000a4e366004620045f8565b62001de1565b6200052362000a6536600462004751565b62001eca565b34801562000a7857600080fd5b50620004ef60d95481565b34801562000a9057600080fd5b50620004a962000aa236600462004892565b805160208183018101805160e98252928201919093012091525460ff1681565b34801562000acf57600080fd5b50620004a962000ae1366004620045f8565b60de6020526000908152604090205460ff1681565b34801562000b0357600080fd5b506200052362000b1536600462004967565b6200224e565b34801562000b2857600080fd5b506200052333600090815260ea60205260409020439055565b34801562000b4e57600080fd5b50620004a962000b6036600462004833565b6200249e565b34801562000b7357600080fd5b5060e55462000547906001600160a01b031681565b34801562000b9557600080fd5b50620004ef600081565b34801562000bac57600080fd5b506200052362000bbe366004620045f8565b620024c9565b34801562000bd157600080fd5b50620004ef60d45481565b34801562000be957600080fd5b50620004ef6200254d565b34801562000c0157600080fd5b50620004ef60df5481565b34801562000c1957600080fd5b506200052362000c2b366004620045f8565b62002598565b34801562000c3e57600080fd5b506200052362000c5036600462004819565b6200261c565b34801562000c6357600080fd5b50620004ef6000805160206200568d83398151915281565b34801562000c8857600080fd5b506200052362000c9a36600462004a67565b62002884565b34801562000cad57600080fd5b50620004ef60cf5481565b34801562000cc557600080fd5b50620004ef60da5481565b34801562000cdd57600080fd5b506200052362000cef366004620049ea565b62002972565b34801562000d0257600080fd5b5062000d1a62000d1436600462004a46565b62002b96565b604051620004b5919062004bcb565b34801562000d3657600080fd5b50620004ef60d65481565b34801562000d4e57600080fd5b50620004ef60d85481565b34801562000d6657600080fd5b506200052362000d7836600462004751565b62002bd3565b34801562000d8b57600080fd5b5060cc5462000547906001600160a01b031681565b34801562000dad57600080fd5b506200052362000dbf36600462004833565b62002d63565b34801562000dd257600080fd5b5060e25462000547906001600160a01b031681565b34801562000df457600080fd5b50620004ef60d15481565b6200052362000e1036600462004751565b62002d8c565b34801562000e2357600080fd5b50620004ef60d25481565b34801562000e3b57600080fd5b50620004ef60dc5481565b34801562000e5357600080fd5b50620004ef60eb5481565b34801562000e6b57600080fd5b506200052362000e7d366004620045f8565b62003105565b34801562000e9057600080fd5b5060ca5462000547906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148062000ed757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600062000eea8162003189565b6001600160a01b03821662000f125760405163f8b7150760e01b815260040160405180910390fd5b62000f2d6000805160206200568d8339815191528362003198565b6040516001600160a01b03831681527f0c1599a415df7df1043c154c0ad7818459c975b2019450a1a5c5381def6a0d78906020015b60405180910390a15050565b600062000f7b8162003189565b6040805180820190915260028152610ccd60f21b60208201526003831062000fc15760405162461bcd60e51b815260040162000fb8919062004bcb565b60405180910390fd5b508162000fd35760d283905562000fee565b816001141562000fe85760d483905562000fee565b60d38390555b60408051848152602081018490527fa2a06a48cf0ad8605be8181861290033a1f5bdbd40cd999dbb30d354ce42291f91015b60405180910390a1505050565b60068111806200103b575080155b156200105a5760405163bd28cf5f60e01b815260040160405180910390fd5b6001600160a01b038316600090815260de60209081526040918290205482518084019093526002835261313560f01b9183019190915260ff16620010b35760405162461bcd60e51b815260040162000fb8919062004bcb565b50620010c183338462003222565b604051806040016040528060018152602001601960f91b81525090620010fc5760405162461bcd60e51b815260040162000fb8919062004bcb565b50604051631df5f84360e11b8152600481018390526024810182905260009081906001600160a01b03861690633bebf08690604401604080518083038186803b1580156200114957600080fd5b505afa1580156200115e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011849190620049c5565b91509150620011a882826003811115620011a257620011a262004d22565b620032bb565b604051806040016040528060018152602001602360f91b81525090620011e35760405162461bcd60e51b815260040162000fb8919062004bcb565b5060ca546000906001600160a01b031663db863276836200120686600162004c2b565b6040516001600160e01b031960e085901b1681526004810192909252602482015260440160206040518083038186803b1580156200124357600080fd5b505afa15801562001258573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200127e91906200494d565b6200129290670de0b6b3a764000062004c69565b9050620012a0813362003310565b604051638000209160e01b815260048101859052602481018690526001600160a01b03871690638000209190604401600060405180830381600087803b158015620012ea57600080fd5b505af1158015620012ff573d6000803e3d6000fd5b50505050505050505050565b6000620013188162003189565b60e08290556040518281527fae8bdbc15b982b030d313524fca26f653a8826332c662cb93c670068172d217e9060200162000f62565b60006200135b8162003189565b6001600160a01b038216620013835760405163f8b7150760e01b815260040160405180910390fd5b6200139e6000805160206200568d8339815191528362002d63565b6040516001600160a01b03831681527f71a08fb94bdb69a641149d5205dc5302a41c829df340a4b4623bcacac213fd399060200162000f62565b6000620013e58162003189565b60df8290556040518281527f950f882195edb5ea868063c1d152918a8cfff7d9f80aba11c970763f87a826e89060200162000f62565b600082815260656020526040902060010154620014388162003189565b62001444838362003198565b505050565b6000805160206200568d833981519152620014648162003189565b60d18290556040518281527f10797db75e153daf26ab5f826d87e077c0fd35336632791e6cd5e9e2203f6f389060200162000f62565b620014a462003513565b6127108260eb54620014b7919062004c2b565b1115620014d75760405163e2a5313760e01b815260040160405180910390fd5b600080620014e5836200356f565b90925090506000620014f8858462004c69565b604051636eb1769f60e11b815233600482015230602482015290915081906001600160a01b0384169063dd62ed3e9060440160206040518083038186803b1580156200154357600080fd5b505afa15801562001558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200157e91906200494d565b101560405180604001604052806002815260200161191960f11b81525090620015bc5760405162461bcd60e51b815260040162000fb8919062004bcb565b506040516323b872dd60e01b81526001600160a01b038316906323b872dd90620015ef9033903090869060040162004b81565b602060405180830381600087803b1580156200160a57600080fd5b505af11580156200161f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016459190620047f5565b5060cb546040516332d46d5f60e01b81526004810187905233602482015260448101839052606481018690526001600160a01b03909116906332d46d5f90608401600060405180830381600087803b158015620016a157600080fd5b505af1158015620016b6573d6000803e3d6000fd5b505050508460eb6000828254620016ce919062004c2b565b9091555050600160975550620016e2915050565b5050565b6001600160a01b0381163314620017585760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840162000fb8565b620016e2828262003620565b6000620017718162003189565b6001600160a01b038216620017995760405163f8b7150760e01b815260040160405180910390fd5b60c980546001600160a01b0319166001600160a01b0384169081179091556040519081527f51ad1d0f5aa4dce01cdbd1ffce145596092a73bcb73db321a014518db8b55b229060200162000f62565b6000620017f58162003189565b60cf8290556040518281527fd80634d8ccc9a8044b81b386ba3360632ef2df87981d13df91a27c21f9405a889060200162000f62565b6000620018388162003189565b5060e680546001600160a01b0319166001600160a01b0392909216919091179055565b6000620018688162003189565b6001600160a01b03841615620018ca5760e480546001600160a01b0319166001600160a01b0386169081179091556040519081527f76007df2bb027b05db3255d900349c109dd5f1811b2f9bf447a14144ca76452b9060200160405180910390a15b6001600160a01b038316156200192c5760d580546001600160a01b0319166001600160a01b0385169081179091556040519081527ffffb08c841cdfb56c0107c5d4bdc815f66bdc90947ca9923bf2c58d1b5b5fbc29060200160405180910390a15b6001600160a01b038216156200198f5760e580546001600160a01b0319166001600160a01b0384169081179091556040519081527fa93511a455ce22450ebdd0bb324e562191f0947dfdfa6e3b87bb82f4dd8502a0906020015b60405180910390a15b50505050565b6000620019a28162003189565b620019ae82476200368a565b604080516001600160a01b03841681524760208201527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910162000f62565b600054610100900460ff161580801562001a0e5750600054600160ff909116105b8062001a2a5750303b15801562001a2a575060005460ff166001145b62001a8f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000fb8565b6000805460ff19166001179055801562001ab3576000805461ff0019166101001790555b6001600160a01b038816158062001ad157506001600160a01b038716155b8062001ae457506001600160a01b038616155b8062001af757506001600160a01b038316155b1562001b165760405163f8b7150760e01b815260040160405180910390fd5b62001b20620037a9565b62001b2a620037d5565b62001b3760008962003198565b60cd80546001600160a01b038089166001600160a01b03199283161790925560cf87905560ca805485841690831617905560d28690556301c9c38060d35569d3c21bcecceda100000060d45560ce8054928616928216929092179091556901c5324e5ad259a0000060d15560fa60d055606460e75560e18054821673dead00000000000000004206942069420694206917905560e28054821673f9690a9521c9c4cea419b70d3720f958a837c3f817905560e38054821673b980d88ae1e9599096e6030fb5381483e4312f3117905560e58054821673999f90f25a2922ae1b21a06066f7edebedad42a917905560e48054821673d51bfa777609213a653a2cd067c9a0132a2d316a17905560e6805490911673965b104e250648d01d4b3b72bac751cde809d29e17905560005b600a81101562001c905762001c7b89898362003809565b8062001c878162004cee565b91505062001c64565b506367f85b8060d6556367fc500060d7556367fda18060d855636800448060d955636801960060da55636804390060db556368058a8060dc55801562001d10576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600062001d278162003189565b6001600160a01b03821662001d4f5760405163f8b7150760e01b815260040160405180910390fd5b60ca80546001600160a01b0319166001600160a01b0384169081179091556040519081527f7bf10f89b05788c765ea1d9d5d613224cf4c42dd9646c5d07f6c627afda3f3e09060200162000f62565b600062001dab8162003189565b60d08290556040518281527f33dc8fd53ad74509c6e95a92cd0fbc8e2d674a94106c8a08fd49b5ca1e0ca1479060200162000f62565b600062001dee8162003189565b60cd546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801562001e3357600080fd5b505afa15801562001e48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e6e91906200494d565b60cd5490915062001e8a906001600160a01b0316848362003923565b604080516001600160a01b0385168152602081018390527f010a5b2e79ead477789f19dd02af3588808775c591b3b1198d173c4d63b473b0910162001020565b62001ed462003513565b33600090815260ea602052604090205443148062001eff575033600090815260ea6020526040902054155b1562001f1e5760405163d0c2348760e01b815260040160405180910390fd5b33600090815260ea602052604081205560dc5442101562001f525760405163461b04cd60e01b815260040160405180910390fd5b60df5462001fa45762001f66828262003988565b60405180604001604052806002815260200161323360f01b8152509062001fa25760405162461bcd60e51b815260040162000fb8919062004bcb565b505b84831462001fc55760405163bd28cf5f60e01b815260040160405180910390fd5b6000805b86811015620021a057600a86868381811062001fe95762001fe962004d38565b905060200201351115604051806040016040528060018152602001604160f81b815250906200202d5760405162461bcd60e51b815260040162000fb8919062004bcb565b50600a88888381811062002045576200204562004d38565b9050602002013510604051806040016040528060018152602001604160f81b81525090620020885760405162461bcd60e51b815260040162000fb8919062004bcb565b50600060dd60008a8a85818110620020a457620020a462004d38565b602090810292909201358352508101919091526040016000908120546001600160a01b031691505b878784818110620020e157620020e162004d38565b905060200201358110156200216a5760d15460405163c529b32f60e01b81523360048201526003602482015260448101919091526001600160a01b0383169063c529b32f90606401600060405180830381600087803b1580156200214457600080fd5b505af115801562002159573d6000803e3d6000fd5b505060019092019150620020cc9050565b5086868381811062002180576200218062004d38565b905060200201358362002194919062004c2b565b92505060010162001fc9565b50600060d15482620021b3919062004c69565b905034811115620021d7576040516307194af560e01b815260040160405180910390fd5b6000620021e5823462004c8b565b90508015620021fa57620021fa33826200368a565b33600090815260e86020526040812080548592906200221b90849062004c2b565b909155505060e35462002238906001600160a01b0316836200368a565b505050620022466001609755565b505050505050565b6200225862003513565b6127108360eb546200226b919062004c2b565b11156200228b5760405163e2a5313760e01b815260040160405180910390fd5b60008062002299836200356f565b90925090506000620022ac868462004c69565b604051636eb1769f60e11b815233600482015230602482015290915081906001600160a01b0384169063dd62ed3e9060440160206040518083038186803b158015620022f757600080fd5b505afa1580156200230c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200233291906200494d565b101560405180604001604052806002815260200161191960f11b81525090620023705760405162461bcd60e51b815260040162000fb8919062004bcb565b506040516323b872dd60e01b81526001600160a01b038316906323b872dd90620023a39033903090869060040162004b81565b602060405180830381600087803b158015620023be57600080fd5b505af1158015620023d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620023f99190620047f5565b5060cb54604051630907e7fd60e21b8152600481018890523360248201526001600160a01b03878116604483015260648201849052608482018790529091169063241f9ff49060a401600060405180830381600087803b1580156200245d57600080fd5b505af115801562002472573d6000803e3d6000fd5b505050508560eb60008282546200248a919062004c2b565b909155505060016097555062001444915050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000620024d68162003189565b6001600160a01b038216620024fe5760405163f8b7150760e01b815260040160405180910390fd5b60cb80546001600160a01b0319166001600160a01b0384169081179091556040519081527f4d2a9cfb68129a8381d5bba2cb0669013221a1dd01a6b412c1828bcd65a60fb49060200162000f62565b6000610bb860eb54116200257357624c4b4060d3546200256e919062004c8b565b905090565b611b5860eb541162002586575060d35490565b60d3546200256e90624c4b4062004c2b565b6000620025a58162003189565b6001600160a01b038216620025cd5760405163f8b7150760e01b815260040160405180910390fd5b60cc80546001600160a01b0319166001600160a01b0384169081179091556040519081527fac03a5111f05a48054f9935e495701b793e80e1c4aebbdfac7947b86f3d0e6519060200162000f62565b60cb5462002635906001600160a01b0316338362003222565b604051806040016040528060018152602001601960f91b81525090620026705760405162461bcd60e51b815260040162000fb8919062004bcb565b5060cb546040516302bbe34760e21b815260048101839052600091829182916001600160a01b031690630aef8d1c9060240160606040518083038186803b158015620026bb57600080fd5b505afa158015620026d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026f6919062004a17565b9250925092506200271c8383600381111562002716576200271662004d22565b62003a0e565b604051806040016040528060018152602001602360f91b81525090620027575760405162461bcd60e51b815260040162000fb8919062004bcb565b5060ca546000906001600160a01b03166309a56f9a84846200277b88600162004c2b565b6040516001600160e01b031960e086901b16815260048101939093526024830191909152604482015260640160206040518083038186803b158015620027c057600080fd5b505afa158015620027d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027fb91906200494d565b6200280f90670de0b6b3a764000062004c69565b90506200281d813362003310565b60cb54604051632a29735b60e01b8152600481018790526001600160a01b0390911690632a29735b90602401600060405180830381600087803b1580156200286457600080fd5b505af115801562002879573d6000803e3d6000fd5b505050505050505050565b83838360006200289684848462002b96565b905060e981604051620028aa919062004aea565b9081526040519081900360200190205460ff1615620028dc57604051638baa579f60e01b815260040160405180910390fd5b600160e982604051620028f0919062004aea565b908152604051908190036020019020805491151560ff199092169190911790556200291e8888888862003a63565b60405180604001604052806002815260200161032360f41b815250906200295a5760405162461bcd60e51b815260040162000fb8919062004bcb565b5062001d103386356020880135608089013562003da4565b60006200297f8162003189565b83620029a257604051632e3aa0d160e21b81526004810185905260240162000fb8565b82620029c55760405163b2aab9cb60e01b81526004810184905260240162000fb8565b828410620029f1576040516399de4cd960e01b8152600481018590526024810184905260440162000fb8565b816001141562002a325760d854831062002a225760405163b2aab9cb60e01b81526004810184905260240162000fb8565b60d684905560d783905562002b57565b816002141562002a9a5760d754841162002a6357604051632e3aa0d160e21b81526004810185905260240162000fb8565b60da54831062002a8a5760405163b2aab9cb60e01b81526004810184905260240162000fb8565b60d884905560d983905562002b57565b816003141562002b025760d954841162002acb57604051632e3aa0d160e21b81526004810185905260240162000fb8565b60dc54831062002af25760405163b2aab9cb60e01b81526004810184905260240162000fb8565b60da84905560db83905562002b57565b816004141562002b3e5760db54841162002b3357604051632e3aa0d160e21b81526004810185905260240162000fb8565b60dc84905562002b57565b6040516330fe9c1560e21b815260040160405180910390fd5b60408051858152602081018590529081018390527f85feccb69218081a003cf1e4f689c1711621e57a6c13638d46dfba7e087ba4479060600162001986565b6040805160208101939093528281019190915260f89290921b6001600160f81b031916606082015281516041818303018152606190910190915290565b62002bdd62003513565b60dc5442111562002c3a5760df5462002c3a5762002bfc828262003988565b60405180604001604052806002815260200161323360f01b8152509062002c385760405162461bcd60e51b815260040162000fb8919062004bcb565b505b6040805180820190915260018152600760fb1b602082015285841462002c755760405162461bcd60e51b815260040162000fb8919062004bcb565b5060005b8581101562002d5757600a85858381811062002c995762002c9962004d38565b905060200201351115604051806040016040528060018152602001604160f81b8152509062002cdd5760405162461bcd60e51b815260040162000fb8919062004bcb565b5060005b85858381811062002cf65762002cf662004d38565b9050602002013581101562002d415762002d2c88888481811062002d1e5762002d1e62004d38565b905060200201353362003e16565b8062002d388162004cee565b91505062002ce1565b508062002d4e8162004cee565b91505062002c79565b50620022466001609755565b60008281526065602052604090206001015462002d808162003189565b62001444838362003620565b62002d9662003513565b33600090815260ea602052604090205443148062002dc1575033600090815260ea6020526040902054155b1562002de05760405163d0c2348760e01b815260040160405180910390fd5b33600090815260ea602052604081205560dc5442101562002e145760405163461b04cd60e01b815260040160405180910390fd5b60df5462002e665762002e28828262003988565b60405180604001604052806002815260200161323360f01b8152509062002e645760405162461bcd60e51b815260040162000fb8919062004bcb565b505b84831462002e875760405163bd28cf5f60e01b815260040160405180910390fd5b6000805b868110156200308257600a86868381811062002eab5762002eab62004d38565b905060200201351115604051806040016040528060018152602001604160f81b8152509062002eef5760405162461bcd60e51b815260040162000fb8919062004bcb565b50600a88888381811062002f075762002f0762004d38565b9050602002013510604051806040016040528060018152602001604160f81b8152509062002f4a5760405162461bcd60e51b815260040162000fb8919062004bcb565b50600060dd60008a8a8581811062002f665762002f6662004d38565b602090810292909201358352508101919091526040016000908120546001600160a01b031691505b87878481811062002fa35762002fa362004d38565b905060200201358110156200304c57816001600160a01b031663c529b32f33600260d054620f424062002fd7919062004c69565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401600060405180830381600087803b1580156200302657600080fd5b505af11580156200303b573d6000803e3d6000fd5b50506001909201915062002f8e9050565b5086868381811062003062576200306262004d38565b905060200201358362003076919062004c2b565b92505060010162002e8b565b5060e55460e35460d0546001600160a01b0392831692620030d1923392911690620030af90869062004c69565b620030be90620f424062004c69565b6001600160a01b03851692919062003f73565b33600090815260e8602052604081208054849290620030f290849062004c2b565b9091555050600160975550620022469050565b6000620031128162003189565b6001600160a01b0382166200313a5760405163f8b7150760e01b815260040160405180910390fd5b60cd80546001600160a01b0319166001600160a01b0384169081179091556040519081527f33d83645f573f9f2c9b1cc4735d5066314d8d747d0d759a7b398a18d017cec009060200162000f62565b62003195813362003f97565b50565b620031a482826200249e565b620016e25760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620031de3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6040516331a9108f60e11b81526004810182905260009084906001600160a01b038581169190831690636352211e9060240160206040518083038186803b1580156200326d57600080fd5b505afa15801562003282573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032a8919062004618565b6001600160a01b03161495945050505050565b600080826003811115620032d357620032d362004d22565b1480620032f457506001826003811115620032f257620032f262004d22565b145b156200330557506005821062000ed7565b506006821062000ed7565b60ce54604051636eb1769f60e11b81526001600160a01b0383811660048301523060248301528492169063dd62ed3e9060440160206040518083038186803b1580156200335c57600080fd5b505afa15801562003371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200339791906200494d565b101560405180604001604052806002815260200161191960f11b81525090620033d55760405162461bcd60e51b815260040162000fb8919062004bcb565b5060ce5460e1546001600160a01b03918216916323b872dd91849116620033fe60028762004c46565b6040518463ffffffff1660e01b81526004016200341e9392919062004b81565b602060405180830381600087803b1580156200343957600080fd5b505af11580156200344e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034749190620047f5565b5060ce5460e2546001600160a01b03918216916323b872dd918491166200349d60028762004c46565b6040518463ffffffff1660e01b8152600401620034bd9392919062004b81565b602060405180830381600087803b158015620034d857600080fd5b505af1158015620034ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014449190620047f5565b60026097541415620035685760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000fb8565b6002609755565b60008060038310604051806040016040528060028152602001610ccd60f21b81525090620035b25760405162461bcd60e51b815260040162000fb8919062004bcb565b5082620035d257505060d25460e45490926001600160a01b039091169150565b8260011415620035f557505060d45460d55490926001600160a01b039091169150565b6000620036016200254d565b60e55490956001600160a01b03909116945092505050565b6001609755565b6200362c82826200249e565b15620016e25760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b80471015620036dc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640162000fb8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146200372b576040519150601f19603f3d011682016040523d82523d6000602084013e62003730565b606091505b5050905080620014445760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840162000fb8565b600054610100900460ff16620037d35760405162461bcd60e51b815260040162000fb89062004be0565b565b600054610100900460ff16620037ff5760405162461bcd60e51b815260040162000fb89062004be0565b620037d362003ffb565b6060600083826040516200381d9062004584565b6200382a92919062004ba5565b604051809103906000f08015801562003847573d6000803e3d6000fd5b506040516305e52ecf60e21b81529091506001600160a01b03821690631794bb3c906200387d9088903090889060040162004b81565b600060405180830381600087803b1580156200389857600080fd5b505af1158015620038ad573d6000803e3d6000fd5b505050600084815260dd6020908152604080832080546001600160a01b0319166001600160a01b03871690811790915580845260de909252808320805460ff191660011790555190925085917fec54df06a1be22338fe866e0a940316a6e147d7c5e9e26ae4779e8a59a97443491a35050505050565b6040516001600160a01b0383166024820152604481018290526200144490849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262004025565b6040516bffffffffffffffffffffffff193360601b166020820152600090819060340160405160208183030381529060405280519060200120905062003a068484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060e054915084905062004101565b949350505050565b60008082600381111562003a265762003a2662004d22565b148062003a475750600182600381111562003a455762003a4562004d22565b145b1562003a5857506004821062000ed7565b506005821062000ed7565b604080518082018252600a815269576561706f6e496e666f60b01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f5e87eb353ffa78be203646d25dee655ed9e0cbe144ffc787c04fe6985a738a6e918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0820152600090819060c00160405160208183030381529060405280519060200120905060007f0b40fe1b7eb5e663b56f7793880e220662118623ecee7cce73dac27860dcc3068460000135856020013586604001602081019062003b7e9190620045f8565b8760600135886080013560405160200162003bca96959493929190958652602086019490945260408501929092526001600160a01b03166060840152608083015260a082015260c00190565b6040516020818303038152906040528051906020012090506000828260405160200162003c0e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8c1692840192909252606083018a9052608083018990529092509060019060a0016020604051602081039080840390855afa15801562003c7a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662003cdf5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640162000fb8565b3362003cf26060880160408901620045f8565b6001600160a01b03161462003d3d5760405162461bcd60e51b815260206004820152601060248201526f2bb937b733902637b7ba1037bbb732b960811b604482015260640162000fb8565b60c9546001600160a01b0382811691161462003d955760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103130b1b5b2b7321029b4b3b732b960511b604482015260640162000fb8565b50600198975050505050505050565b60cb54604051635bfc5a6f60e01b81526001600160a01b03868116600483015260248201869052604482018590526064820184905290911690635bfc5a6f90608401600060405180830381600087803b15801562003e0157600080fd5b505af115801562001d10573d6000803e3d6000fd5b600082815260dd602090815260409182902054825180840190935260018352603960f81b918301919091526001600160a01b0316908162003e6c5760405162461bcd60e51b815260040162000fb8919062004bcb565b5062003e7762004119565b6001600160a01b038316600090815260e860205260409020541062003eaf5760405163e2a5313760e01b815260040160405180910390fd5b60cd5460e35460cf546001600160a01b039283169262003ed792849287929091169062003f73565b6040516331c3efdd60e21b81526001600160a01b03848116600480840191909152602483015283169063c70fbf7490604401600060405180830381600087803b15801562003f2457600080fd5b505af115801562003f39573d6000803e3d6000fd5b505050506001600160a01b038316600090815260e86020526040812080546001929062003f6890849062004c2b565b909155505050505050565b6200198f846323b872dd60e01b858585604051602401620039509392919062004b81565b62003fa382826200249e565b620016e25762003fb38162004190565b62003fc0836020620041a3565b60405160200162003fd392919062004b08565b60408051601f198184030181529082905262461bcd60e51b825262000fb89160040162004bcb565b600054610100900460ff16620036195760405162461bcd60e51b815260040162000fb89062004be0565b60006200407c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620043649092919063ffffffff16565b9050805160001480620040a0575080806020019051810190620040a09190620047f5565b620014445760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000fb8565b60008262004110858462004375565b14949350505050565b600060d654421180156200412e575060d75442105b156200413a5750600190565b60d854421180156200414d575060d95442105b15620041595750600290565b60da54421180156200416c575060db5442105b15620041785750600390565b60dc544211156200418a575061271090565b50600090565b606062000ed76001600160a01b03831660145b60606000620041b483600262004c69565b620041c190600262004c2b565b67ffffffffffffffff811115620041dc57620041dc62004d4e565b6040519080825280601f01601f19166020018201604052801562004207576020820181803683370190505b509050600360fc1b8160008151811062004225576200422562004d38565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811062004257576200425762004d38565b60200101906001600160f81b031916908160001a90535060006200427d84600262004c69565b6200428a90600162004c2b565b90505b60018111156200430c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620042c257620042c262004d38565b1a60f81b828281518110620042db57620042db62004d38565b60200101906001600160f81b031916908160001a90535060049490941c93620043048162004cd4565b90506200428d565b5083156200435d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000fb8565b9392505050565b606062003a068484600085620043cb565b600081815b8451811015620043c357620043ac828683815181106200439e576200439e62004d38565b6020026020010151620044ae565b915080620043ba8162004cee565b9150506200437a565b509392505050565b6060824710156200442e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000fb8565b600080866001600160a01b031685876040516200444c919062004aea565b60006040518083038185875af1925050503d80600081146200448b576040519150601f19603f3d011682016040523d82523d6000602084013e62004490565b606091505b5091509150620044a387838387620044e0565b979650505050505050565b6000818310620044cc5760008281526020849052604090206200435d565b60008381526020839052604090206200435d565b606083156200455157825162004549576001600160a01b0385163b620045495760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000fb8565b508162003a06565b62003a068383815115620045685781518083602001fd5b8060405162461bcd60e51b815260040162000fb8919062004bcb565b6109128062004d7b83390190565b60008083601f840112620045a557600080fd5b50813567ffffffffffffffff811115620045be57600080fd5b6020830191508360208260051b8501011115620045da57600080fd5b9250929050565b803560ff81168114620045f357600080fd5b919050565b6000602082840312156200460b57600080fd5b81356200435d8162004d64565b6000602082840312156200462b57600080fd5b81516200435d8162004d64565b6000806000606084860312156200464e57600080fd5b83356200465b8162004d64565b925060208401356200466d8162004d64565b915060408401356200467f8162004d64565b809150509250925092565b600080600080600080600060e0888a031215620046a657600080fd5b8735620046b38162004d64565b96506020880135620046c58162004d64565b95506040880135620046d78162004d64565b9450606088013593506080880135925060a0880135620046f78162004d64565b915060c0880135620047098162004d64565b8091505092959891949750929550565b6000806000606084860312156200472f57600080fd5b83356200473c8162004d64565b95602085013595506040909401359392505050565b600080600080600080606087890312156200476b57600080fd5b863567ffffffffffffffff808211156200478457600080fd5b620047928a838b0162004592565b90985096506020890135915080821115620047ac57600080fd5b620047ba8a838b0162004592565b90965094506040890135915080821115620047d457600080fd5b50620047e389828a0162004592565b979a9699509497509295939492505050565b6000602082840312156200480857600080fd5b815180151581146200435d57600080fd5b6000602082840312156200482c57600080fd5b5035919050565b600080604083850312156200484757600080fd5b8235915060208301356200485b8162004d64565b809150509250929050565b6000602082840312156200487957600080fd5b81356001600160e01b0319811681146200435d57600080fd5b600060208284031215620048a557600080fd5b813567ffffffffffffffff80821115620048be57600080fd5b818401915084601f830112620048d357600080fd5b813581811115620048e857620048e862004d4e565b604051601f8201601f19908116603f0116810190838211818310171562004913576200491362004d4e565b816040528281528760208487010111156200492d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000602082840312156200496057600080fd5b5051919050565b6000806000606084860312156200497d57600080fd5b833592506020840135620049918162004d64565b929592945050506040919091013590565b60008060408385031215620049b657600080fd5b50508035926020909101359150565b60008060408385031215620049d957600080fd5b505080516020909101519092909150565b60008060006060848603121562004a0057600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121562004a2d57600080fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121562004a5c57600080fd5b6200473c84620045e1565b60008060008084860361010081121562004a8057600080fd5b62004a8b86620045e1565b9450602086013593506040860135925060a0605f198201121562004aae57600080fd5b509295919450926060019150565b6000815180845262004ad681602086016020860162004ca5565b601f01601f19169290920160200192915050565b6000825162004afe81846020870162004ca5565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162004b4281601785016020880162004ca5565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162004b7581602884016020880162004ca5565b01602801949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038316815260406020820181905260009062003a069083018462004abc565b6020815260006200435d602083018462004abc565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111562004c415762004c4162004d0c565b500190565b60008262004c6457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562004c865762004c8662004d0c565b500290565b60008282101562004ca05762004ca062004d0c565b500390565b60005b8381101562004cc257818101518382015260200162004ca8565b838111156200198f5750506000910152565b60008162004ce65762004ce662004d0c565b506000190190565b600060001982141562004d055762004d0562004d0c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146200319557600080fdfe608060405260405161091238038061091283398101604081905261002291610457565b61002e82826000610035565b50506105a8565b61003e8361010f565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b1561010a57610108836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c057600080fd5b505afa1580156100d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f8919061043c565b836102c160201b6100291760201c565b505b505050565b610122816102ed60201b6100551760201c565b6101815760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b610204816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101bd57600080fd5b505afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f5919061043c565b6102ed60201b6100551760201c565b6102695760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610178565b806102a07fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102fc60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102e683836040518060600160405280602781526020016108eb602791396102ff565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b03168560405161031c9190610517565b600060405180830381855af49150503d8060008114610357576040519150601f19603f3d011682016040523d82523d6000602084013e61035c565b606091505b50909250905061036e86838387610378565b9695505050505050565b606083156103e45782516103dd576001600160a01b0385163b6103dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610178565b50816103ee565b6103ee83836103f6565b949350505050565b8151156104065781518083602001fd5b8060405162461bcd60e51b81526004016101789190610533565b80516001600160a01b038116811461043757600080fd5b919050565b60006020828403121561044e57600080fd5b6102e682610420565b6000806040838503121561046a57600080fd5b61047383610420565b60208401519092506001600160401b038082111561049057600080fd5b818501915085601f8301126104a457600080fd5b8151818111156104b6576104b6610592565b604051601f8201601f19908116603f011681019083821181831017156104de576104de610592565b816040528281528860208487010111156104f757600080fd5b610508836020830160208801610566565b80955050505050509250929050565b60008251610529818460208701610566565b9190910192915050565b6020815260008251806020840152610552816040850160208701610566565b601f01601f19169190910160400192915050565b60005b83811015610581578181015183820152602001610569565b838111156101085750506000910152565b634e487b7160e01b600052604160045260246000fd5b610334806105b76000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61010f565b565b606061004e838360405180606001604052806027815260200161030160279139610133565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a9190610258565b905090565b3660008037600080366000845af43d6000803e80801561012e573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516101509190610281565b600060405180830381855af49150503d806000811461018b576040519150601f19603f3d011682016040523d82523d6000602084013e610190565b606091505b50915091506101a1868383876101ab565b9695505050505050565b6060831561021c578251610215576001600160a01b0385163b6102155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610226565b610226838361022e565b949350505050565b81511561023e5781518083602001fd5b8060405162461bcd60e51b815260040161020c919061029d565b60006020828403121561026a57600080fd5b81516001600160a01b038116811461004e57600080fd5b600082516102938184602087016102d0565b9190910192915050565b60208152600082518060208401526102bc8160408501602087016102d0565b601f01601f19169190910160400192915050565b60005b838110156102eb5781810151838201526020016102d3565b838111156102fa576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000807000a416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564f7650eb8b2f3fb3c9b995a8ee2fc3c04ed07f1c4efe01998177b109698c67517a164736f6c6343000807000a60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6126c780620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80634f6ccce711610104578063a22cb465116100a2578063e5aec34d11610071578063e5aec34d146103fc578063e985e9c51461045b578063f2fde38b14610497578063f851a440146104aa57600080fd5b8063a22cb465146103af578063b88d4fde146103c2578063c45a0155146103d5578063c87b56dd146103e957600080fd5b806370a08231116100de57806370a082311461037b578063715018a61461038e5780638da5cb5b1461039657806395d89b41146103a757600080fd5b80634f6ccce7146103425780635bfc5a6f146103555780636352211e1461036857600080fd5b806323b872dd116101715780632f745c591161014b5780632f745c59146102f657806332d46d5f1461030957806342842e0e1461031c578063485cc9551461032f57600080fd5b806323b872dd146102bd578063241f9ff4146102d05780632a29735b146102e357600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630aef8d1c14610251578063150b7a021461027f57806318160ddd146102ab57600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e23660046121e5565b6104be565b60405190151581526020015b60405180910390f35b6102046104e9565b6040516101f3919061240c565b61022461021f36600461221f565b61057b565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004612182565b6105a2565b005b61026461025f36600461221f565b6106bd565b604080519384526020840192909252908201526060016101f3565b61029261028d36600461206a565b6107c2565b6040516001600160e01b031990911681526020016101f3565b60cb545b6040519081526020016101f3565b61024f6102cb36600461202e565b6107d3565b61024f6102de366004612238565b610804565b61024f6102f136600461221f565b61089f565b6102af610304366004612182565b6109ae565b61024f610317366004612286565b610a44565b61024f61032a36600461202e565b610adc565b61024f61033d366004611ffb565b610af7565b6102af61035036600461221f565b610ccc565b61024f6103633660046121ac565b610d5f565b61022461037636600461221f565b610f2d565b6102af610389366004611fe0565b610f8d565b61024f611013565b6033546001600160a01b0316610224565b610204611027565b61024f6103bd366004612146565b611036565b61024f6103d036600461206a565b611045565b61016054610224906001600160a01b031681565b6102046103f736600461221f565b61107d565b61044a61040a36600461221f565b610161602052600090815260409020805460019091015460ff8082169161010081048216916201000082041690630100000090046001600160a01b031685565b6040516101f395949392919061254e565b6101e7610469366004611ffb565b6001600160a01b039182166000908152609c6020908152604080832093909416825291909152205460ff1690565b61024f6104a5366004611fe0565b6110f1565b61015f54610224906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b14806104e357506104e38261116a565b92915050565b6060609780546104f8906125fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610524906125fb565b80156105715780601f1061054657610100808354040283529160200191610571565b820191906000526020600020905b81548152906001019060200180831161055457829003601f168201915b5050505050905090565b6000610586826111ba565b506000908152609b60205260409020546001600160a01b031690565b60006105ad82610f2d565b9050806001600160a01b0316836001600160a01b031614156106205760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061063c575061063c8133610469565b6106ae5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610617565b6106b88383611219565b505050565b600081815261016160209081526040808320815160a081019092528054825260018101548493849384939092909183019060ff1660038111156107025761070261264c565b60038111156107135761071361264c565b81526020016001820160019054906101000a900460ff16600181111561073b5761073b61264c565b600181111561074c5761074c61264c565b81526001919091015462010000810460ff16151560208084019190915263010000009091046001600160a01b031660409092019190915281519082015191925090600381111561079e5761079e61264c565b826040015160018111156107b4576107b461264c565b935093509350509193909250565b630a85bd0160e11b5b949350505050565b6107dd3382611287565b6107f95760405162461bcd60e51b81526004016106179061241f565b6106b8838383611305565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b031633146108495760405162461bcd60e51b8152600401610617919061240c565b5060006108568685611476565b90507fcd4eba97245f119d27ee52c43b533e5835c6d96e7fecdc43472fa92a002d6d37818686868660405161088f959493929190612394565b60405180910390a1505050505050565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b031633146108e45760405162461bcd60e51b8152600401610617919061240c565b5060008181526101616020908152604091829020600181015483518085019094526002845261333360f01b92840192909252919062010000900460ff1661093e5760405162461bcd60e51b8152600401610617919061240c565b50805461094c9060016125a0565b80825560018201547f09f77eee06a942030eea5c1d050f3de36421909551b58db04b592be0cd34caf891849160ff16600381111561098c5761098c61264c565b6040805193845260208401929092529082015260600160405180910390a15050565b60006109b983610f8d565b8210610a1b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610617565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610a895760405162461bcd60e51b8152600401610617919061240c565b506000610a968585611476565b90507f1cafaafbdee6f39308c5747d112778c00e78e458d6a31ef264b18e8bbdba402581858585604051610acd94939291906123d4565b60405180910390a15050505050565b6106b883838360405180602001604052806000815250611045565b600054610100900460ff1615808015610b175750600054600160ff909116105b80610b315750303b158015610b31575060005460ff166001145b610b945760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610617565b6000805460ff191660011790558015610bb7576000805461ff0019166101001790555b6001600160a01b0383161580610bd457506001600160a01b038216155b15610bf25760405163f8b7150760e01b815260040160405180910390fd5b610c376040518060400160405280600881526020016729a3abb2b0b837b760c11b8152506040518060400160405280600381526020016253475760e81b815250611557565b610c3f611588565b610c476115af565b610c50836110f1565b61015f80546001600160a01b038086166001600160a01b03199283161790925561016080549285169290911691909117905580156106b8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6000610cd760cb5490565b8210610d3a5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610617565b60cb8281548110610d4d57610d4d612678565b90600052602060002001549050919050565b610160546040805180820190915260018152601b60f91b6020820152906001600160a01b03163314610da45760405162461bcd60e51b8152600401610617919061240c565b50600081815261016160209081526040918290206001015482518084019093526002835261191b60f11b918301919091526001600160a01b0386811663010000009092041614610e075760405162461bcd60e51b8152600401610617919061240c565b5060008181526101616020526040812055826003811115610e2a57610e2a61264c565b60008281526101616020526040902060019081018054909160ff1990911690836003811115610e5b57610e5b61264c565b0217905550816001811115610e7257610e7261264c565b60008281526101616020526040902060019081018054909161ff001990911690610100908490811115610ea757610ea761264c565b0217905550600081815261016160209081526040808320600101805462ff000019166201000017905580518481526001600160a01b0388169281019290925281018590526060810191909152608081018390527f1ec54e4e9c2397e740e448c116036a91242036838358c0c27d407b033a228bd79060a00160405180910390a150505050565b6000818152609960205260408120546001600160a01b0316806104e35760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610617565b60006001600160a01b038216610ff75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610617565b506001600160a01b03166000908152609a602052604090205490565b61101b6115de565b6110256000611638565b565b6060609880546104f8906125fb565b61104133838361168a565b5050565b61104f3383611287565b61106b5760405162461bcd60e51b81526004016106179061241f565b61107784848484611759565b50505050565b6060611088826111ba565b600061109f60408051602081019091526000815290565b905060008151116110bf57604051806020016040528060008152506110ea565b806110c98461178c565b6040516020016110da929190612328565b6040516020818303038152906040525b9392505050565b6110f96115de565b6001600160a01b03811661115e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610617565b61116781611638565b50565b60006001600160e01b031982166380ac58cd60e01b148061119b57506001600160e01b03198216635b5e139f60e01b145b806104e357506301ffc9a760e01b6001600160e01b03198316146104e3565b6000818152609960205260409020546001600160a01b03166111675760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610617565b6000818152609b6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061124e82610f2d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061129383610f2d565b9050806001600160a01b0316846001600160a01b031614806112da57506001600160a01b038082166000908152609c602090815260408083209388168352929052205460ff165b806107cb5750836001600160a01b03166112f38461057b565b6001600160a01b031614949350505050565b826001600160a01b031661131882610f2d565b6001600160a01b03161461133e5760405162461bcd60e51b8152600401610617906124be565b6001600160a01b0382166113a05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610617565b6113ad8383836001611821565b826001600160a01b03166113c082610f2d565b6001600160a01b0316146113e65760405162461bcd60e51b8152600401610617906124be565b6000818152609b6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609a8552838620805460001901905590871680865283862080546001019055868652609990945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b606060008367ffffffffffffffff8111156114935761149361268e565b6040519080825280602002602001820160405280156114bc578160200160208202803683370190505b50905060005b8481101561154f5760006114d560cb5490565b6114e09060016125a0565b90506114ec8582611955565b600081815261016160205260409020600101805462010000600160b81b03191663010000006001600160a01b0388160262ff000019161790558251819084908490811061153b5761153b612678565b6020908102919091010152506001016114c2565b509392505050565b600054610100900460ff1661157e5760405162461bcd60e51b815260040161061790612503565b611041828261196f565b600054610100900460ff166110255760405162461bcd60e51b815260040161061790612503565b600054610100900460ff166115d65760405162461bcd60e51b815260040161061790612503565b6110256119bd565b6033546001600160a01b031633146110255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610617565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156116ec5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610617565b6001600160a01b038381166000818152609c6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611764848484611305565b611770848484846119ed565b6110775760405162461bcd60e51b81526004016106179061246c565b6060600061179983611af7565b600101905060008167ffffffffffffffff8111156117b9576117b961268e565b6040519080825280601f01601f1916602001820160405280156117e3576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461181c5761154f565b6117ed565b60018111156118905760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610617565b816001600160a01b0385166118ec576118e78160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b61190f565b836001600160a01b0316856001600160a01b03161461190f5761190f8582611bcf565b6001600160a01b03841661192b5761192681611c6c565b61194e565b846001600160a01b0316846001600160a01b03161461194e5761194e8482611d1b565b5050505050565b611041828260405180602001604052806000815250611d5f565b600054610100900460ff166119965760405162461bcd60e51b815260040161061790612503565b81516119a9906097906020850190611f2b565b5080516106b8906098906020840190611f2b565b600054610100900460ff166119e45760405162461bcd60e51b815260040161061790612503565b61102533611638565b60006001600160a01b0384163b15611aef57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611a31903390899088908890600401612357565b602060405180830381600087803b158015611a4b57600080fd5b505af1925050508015611a7b575060408051601f3d908101601f19168201909252611a7891810190612202565b60015b611ad5573d808015611aa9576040519150601f19603f3d011682016040523d82523d6000602084013e611aae565b606091505b508051611acd5760405162461bcd60e51b81526004016106179061246c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506107cb565b5060016107cb565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611b365772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611b62576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611b8057662386f26fc10000830492506010015b6305f5e1008310611b98576305f5e100830492506008015b6127108310611bac57612710830492506004015b60648310611bbe576064830492506002015b600a83106104e35760010192915050565b60006001611bdc84610f8d565b611be691906125b8565b600083815260ca6020526040902054909150808214611c39576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb54600090611c7e906001906125b8565b600083815260cc602052604081205460cb8054939450909284908110611ca657611ca6612678565b906000526020600020015490508060cb8381548110611cc757611cc7612678565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb805480611cff57611cff612662565b6001900381819060005260206000200160009055905550505050565b6000611d2683610f8d565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b611d698383611d92565b611d7660008484846119ed565b6106b85760405162461bcd60e51b81526004016106179061246c565b6001600160a01b038216611de85760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610617565b6000818152609960205260409020546001600160a01b031615611e4d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610617565b611e5b600083836001611821565b6000818152609960205260409020546001600160a01b031615611ec05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610617565b6001600160a01b0382166000818152609a6020908152604080832080546001019055848352609990915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611f37906125fb565b90600052602060002090601f016020900481019282611f595760008555611f9f565b82601f10611f7257805160ff1916838001178555611f9f565b82800160010185558215611f9f579182015b82811115611f9f578251825591602001919060010190611f84565b50611fab929150611faf565b5090565b5b80821115611fab5760008155600101611fb0565b80356001600160a01b0381168114611fdb57600080fd5b919050565b600060208284031215611ff257600080fd5b6110ea82611fc4565b6000806040838503121561200e57600080fd5b61201783611fc4565b915061202560208401611fc4565b90509250929050565b60008060006060848603121561204357600080fd5b61204c84611fc4565b925061205a60208501611fc4565b9150604084013590509250925092565b6000806000806080858703121561208057600080fd5b61208985611fc4565b935061209760208601611fc4565b925060408501359150606085013567ffffffffffffffff808211156120bb57600080fd5b818701915087601f8301126120cf57600080fd5b8135818111156120e1576120e161268e565b604051601f8201601f19908116603f011681019083821181831017156121095761210961268e565b816040528281528a602084870101111561212257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561215957600080fd5b61216283611fc4565b91506020830135801515811461217757600080fd5b809150509250929050565b6000806040838503121561219557600080fd5b61219e83611fc4565b946020939093013593505050565b600080600080608085870312156121c257600080fd5b6121cb85611fc4565b966020860135965060408601359560600135945092505050565b6000602082840312156121f757600080fd5b81356110ea816126a4565b60006020828403121561221457600080fd5b81516110ea816126a4565b60006020828403121561223157600080fd5b5035919050565b600080600080600060a0868803121561225057600080fd5b8535945061226060208701611fc4565b935061226e60408701611fc4565b94979396509394606081013594506080013592915050565b6000806000806080858703121561229c57600080fd5b843593506122ac60208601611fc4565b93969395505050506040820135916060013590565b600081518084526020808501945080840160005b838110156122f1578151875295820195908201906001016122d5565b509495945050505050565b600081518084526123148160208601602086016125cf565b601f01601f19169290920160200192915050565b6000835161233a8184602088016125cf565b83519083019061234e8183602088016125cf565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061238a908301846122fc565b9695505050505050565b60a0815260006123a760a08301886122c1565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b6080815260006123e760808301876122c1565b6001600160a01b03959095166020830152506040810192909252606090910152919050565b6020815260006110ea60208301846122fc565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b85815260a08101600486106125655761256561264c565b8560208301526002851061257b5761257b61264c565b604082019490945291151560608301526001600160a01b031660809091015292915050565b600082198211156125b3576125b3612636565b500190565b6000828210156125ca576125ca612636565b500390565b60005b838110156125ea5781810151838201526020016125d2565b838111156110775750506000910152565b600181811c9082168061260f57607f821691505b6020821081141561263057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461116757600080fdfea164736f6c6343000807000a60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61342c80620000f36000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c8063715018a6116100f9578063a3d98d4511610097578063d915773411610071578063d9157734146103a5578063ddd6e640146103b8578063ea8db03a146103cb578063f2fde38b146103de57600080fd5b8063a3d98d451461035f578063c350a1b514610372578063c6d9cfcc1461038557600080fd5b80638da5cb5b116100d35780638da5cb5b1461031557806397b91e92146103265780639ab4a445146103395780639e8e7c1e1461034c57600080fd5b8063715018a6146102cc5780637d5aa5f4146102d45780638825213f146102e757600080fd5b8063444784251161016657806355eba8681161014057806355eba8681461027c5780635c975abb1461028f57806365d65e86146102a65780636a4234eb146102b957600080fd5b806344478425146102435780634d1044b91461025657806351cff8d91461026957600080fd5b806321b7e5e6146101ae57806326232a2e146101de57806334784586146101f557806336b19cd71461020a57806336f956701461021d5780633ab378a314610230575b600080fd5b60cc546101c1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e760cb5481565b6040519081526020016101d5565b610208610203366004612fc8565b6103f1565b005b60d0546101c1906001600160a01b031681565b61020861022b366004612e32565b610ad2565b61020861023e366004612f63565b610b56565b60cf546101c1906001600160a01b031681565b610208610264366004612e32565b610bd0565b610208610277366004612e32565b610c4d565b61020861028a366004612e32565b610e71565b60655460ff165b60405190151581526020016101d5565b6097546101c1906001600160a01b031681565b6102086102c7366004612e32565b610f38565b610208610fff565b60ca546101c1906001600160a01b031681565b6102966102f5366004612eb2565b805160208183018101805160d28252928201919093012091525460ff1681565b6033546001600160a01b03166101c1565b610208610334366004612e32565b611013565b60cd546101c1906001600160a01b031681565b61020861035a36600461308f565b6110da565b61020861036d36600461302e565b61128f565b610208610380366004612e54565b611654565b610398610393366004612f95565b611851565b6040516101d591906131cf565b6102086103b336600461302e565b61188e565b60ce546101c1906001600160a01b031681565b60d1546101c1906001600160a01b031681565b6102086103ec366004612e32565b611d54565b6103f9611dcd565b8383836000610409848484611851565b905060d28160405161041b9190613187565b9081526040519081900360200190205460ff161561044c57604051638baa579f60e01b815260040160405180910390fd5b600160d28260405161045e9190613187565b908152604051908190036020019020805491151560ff1990921691909117905561048a88888888611e13565b60405180604001604052806002815260200161032360f41b815250906104cc5760405162461bcd60e51b81526004016104c391906131cf565b60405180910390fd5b506104d78580613266565b90506104e66020870187613266565b90501460405180604001604052806002815260200161323560f01b815250906105225760405162461bcd60e51b81526004016104c391906131cf565b506105306060860186613266565b905061053f6020870187613266565b90501460405180604001604052806002815260200161323560f01b8152509061057b5760405162461bcd60e51b81526004016104c391906131cf565b506105896040860186613266565b90506105986020870187613266565b90501460405180604001604052806002815260200161323560f01b815250906105d45760405162461bcd60e51b81526004016104c391906131cf565b506105e26080860186613266565b90506105f16020870187613266565b90501460405180604001604052806002815260200161323560f01b8152509061062d5760405162461bcd60e51b81526004016104c391906131cf565b5061063b60a0860186613266565b905061064a6020870187613266565b90501460405180604001604052806002815260200161323560f01b815250906106865760405162461bcd60e51b81526004016104c391906131cf565b5060005b6106948680613266565b9050811015610ac65760cb54600090612710906106b460608a018a613266565b858181106106c4576106c46133b3565b905060200201356106d59190613320565b6106df91906132fe565b90506000816106f160608a018a613266565b85818110610701576107016133b3565b90506020020135610712919061333f565b9050600061074261072660808b018b613266565b86818110610736576107366133b3565b905060200201356121d4565b905061078c3361075560408c018c613266565b87818110610765576107656133b3565b905060200201602081019061077a9190612e32565b6001600160a01b038416919085612265565b60cf546107a8906001600160a01b038381169133911686612265565b6108366107b860208b018b613266565b868181106107c8576107c86133b3565b90506020020160208101906107dd9190612e32565b6107ea60408c018c613266565b878181106107fa576107fa6133b3565b905060200201602081019061080f9190612e32565b3361081a8d80613266565b8981811061082a5761082a6133b3565b905060200201356122d0565b61084360a08a018a613266565b85818110610853576108536133b3565b90506020020135600014156109515761086c8980613266565b8581811061087c5761087c6133b3565b905060200201358980602001906108939190613266565b868181106108a3576108a36133b3565b90506020020160208101906108b89190612e32565b6001600160a01b03167f81f11754241682998f8b7f9eefd79ff5469d62fdd5354e0e97e5c4c986ee5b2f6108ef60608d018d613266565b888181106108ff576108ff6133b3565b905060200201358c80608001906109169190613266565b89818110610926576109266133b3565b60408051948552602091820293909301359084015250339082015260600160405180910390a3610ab0565b61095e60a08a018a613266565b8581811061096e5761096e6133b3565b9050602002013560011415610a97577f6a74f267d518770174614633cca0ce832085d10a0ac3d9e957daab484448ce8560016109ad60408c018c613266565b878181106109bd576109bd6133b3565b90506020020160208101906109d29190612e32565b336109e060608e018e613266565b898181106109f0576109f06133b3565b905060200201358d8060800190610a079190613266565b8a818110610a1757610a176133b3565b60200291909101359050610a2b8f80613266565b8b818110610a3b57610a3b6133b3565b905060200201358f8060200190610a529190613266565b8c818110610a6257610a626133b3565b9050602002016020810190610a779190612e32565b604051610a8a97969594939291906131e2565b60405180910390a1610ab0565b604051636f70011560e11b815260040160405180910390fd5b5050508080610abe90613382565b91505061068a565b505b5050505050505050565b610ada612347565b6001600160a01b038116610b015760405163f8b7150760e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0383169081179091556040519081527f51ad1d0f5aa4dce01cdbd1ffce145596092a73bcb73db321a014518db8b55b22906020015b60405180910390a150565b610b5e612347565b604080518082019091526002815261189b60f11b6020820152612710821115610b9a5760405162461bcd60e51b81526004016104c391906131cf565b5060cb8190556040518181527f1def3fe5c2d754e7b810ab3913bff7d6003b0bd23f1de160d3218de6158325ed90602001610b4b565b610bd8612347565b6001600160a01b038116610bff5760405163f8b7150760e01b815260040160405180910390fd5b60d180546001600160a01b0319166001600160a01b0383169081179091556040519081527f318fcfac94f60f12cf560cfa4a7650c22b0ff214caf5352ad84e77dee5c44a4090602001610b4b565b610c55612347565b60ca546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610c9d57600080fd5b505afa158015610cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd59190612f7c565b9050610ceb6001600160a01b03831684836123a1565b60cd546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610d3357600080fd5b505afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b9190612f7c565b9050610d816001600160a01b03831686836123a1565b60cc546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b158015610dc957600080fd5b505afa158015610ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e019190612f7c565b9050610e176001600160a01b03831688836123a1565b604080516001600160a01b038916815260208101879052908101849052606081018290527f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060800160405180910390a150505050505050565b610e79612347565b6001600160a01b038116610ea05760405163f8b7150760e01b815260040160405180910390fd5b60cd54604080518082019091526002815261323160f01b6020820152906001600160a01b0383811691161415610ee95760405162461bcd60e51b81526004016104c391906131cf565b5060cd80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa93511a455ce22450ebdd0bb324e562191f0947dfdfa6e3b87bb82f4dd8502a090602001610b4b565b610f40612347565b6001600160a01b038116610f675760405163f8b7150760e01b815260040160405180910390fd5b60ca54604080518082019091526002815261323160f01b6020820152906001600160a01b0383811691161415610fb05760405162461bcd60e51b81526004016104c391906131cf565b5060ca80546001600160a01b0319166001600160a01b0383169081179091556040519081527f76007df2bb027b05db3255d900349c109dd5f1811b2f9bf447a14144ca76452b90602001610b4b565b611007612347565b61101160006123d6565b565b61101b612347565b6001600160a01b0381166110425760405163f8b7150760e01b815260040160405180910390fd5b60cc54604080518082019091526002815261323160f01b6020820152906001600160a01b038381169116141561108b5760405162461bcd60e51b81526004016104c391906131cf565b5060cc80546001600160a01b0319166001600160a01b0383169081179091556040519081527ffffb08c841cdfb56c0107c5d4bdc815f66bdc90947ca9923bf2c58d1b5b5fbc290602001610b4b565b6110e2611dcd565b83838360006110f2848484611851565b905060d2816040516111049190613187565b9081526040519081900360200190205460ff161561113557604051638baa579f60e01b815260040160405180910390fd5b600160d2826040516111479190613187565b908152604051908190036020019020805491151560ff1990921691909117905561117388888888612428565b60405180604001604052806002815260200161032360f41b815250906111ac5760405162461bcd60e51b81526004016104c391906131cf565b5060d1546001600160a01b03166399c38ff96111ce6040880160208901612e32565b60405160e083901b6001600160e01b03191681526001600160a01b03909116600482015287356024820152604401600060405180830381600087803b15801561121657600080fd5b505af115801561122a573d6000803e3d6000fd5b5061123f925050506040860160208701612e32565b6001600160a01b03167f8d8c996e917ab50d240bb4b3eb56676b34b0ff6d7bd5a340778df824125581c2866000013560405161127d91815260200190565b60405180910390a25050505050505050565b611297611dcd565b83838360006112a7848484611851565b905060d2816040516112b99190613187565b9081526040519081900360200190205460ff16156112ea57604051638baa579f60e01b815260040160405180910390fd5b600160d2826040516112fc9190613187565b908152604051908190036020019020805491151560ff1990921691909117905561132888888888612693565b60405180604001604052806002815260200161032360f41b815250906113615760405162461bcd60e51b81526004016104c391906131cf565b50600061271060cb5487608001356113799190613320565b61138391906132fe565b9050600061139582608089013561333f565b905060006113a68860a001356121d4565b6040516c66697865642d6c697374696e6760981b6020820152909150602d01604051602081830303815290604052805190602001208880604001906113eb91906132b7565b6040516020016113fc929190613177565b6040516020818303038152906040528051906020012014156114e25761142c3361077a60808b0160608c01612e32565b60cf54611448906001600160a01b038381169133911686612265565b61147361145b60408a0160208b01612e32565b61146b60808b0160608c01612e32565b338b356122d0565b873561148560408a0160208b01612e32565b6040805160808c0135815260a08c0135602082015233918101919091526001600160a01b0391909116907f81f11754241682998f8b7f9eefd79ff5469d62fdd5354e0e97e5c4c986ee5b2f906060015b60405180910390a3611647565b6040516e61756374696f6e2d6c697374696e6760881b6020820152602f016040516020818303038152906040528051906020012088806040019061152691906132b7565b604051602001611537929190613177565b604051602081830303815290604052805190602001201415610a975761157861156660808a0160608b01612e32565b6001600160a01b038316903385612265565b6115a261158b60808a0160608b01612e32565b60cf546001600160a01b0384811692911686612265565b6115cd6115b560408a0160208b01612e32565b336115c660808c0160608d01612e32565b8b356122d0565b87356115df60408a0160208b01612e32565b6001600160a01b03167f60d6e97e9899931d93b4f8067129e005920a44a26708f624c02fc58e98005cf560808b0180359060a08d0135906116239060608f01612e32565b6040805193845260208401929092526001600160a01b0316908201526060016114d5565b5050505050505050505050565b600054610100900460ff16158080156116745750600054600160ff909116105b8061168e5750303b15801561168e575060005460ff166001145b6116f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c3565b6000805460ff191660011790558015611714576000805461ff0019166101001790555b6001600160a01b038416158061173157506001600160a01b038216155b1561174f5760405163f8b7150760e01b815260040160405180910390fd5b604080518082019091526002815261189b60f11b602082015261271084111561178b5760405162461bcd60e51b81526004016104c391906131cf565b50611794612821565b61179d84611d54565b6117a5612850565b60cb83905560ce80546001600160a01b0384166001600160a01b03199182161790915560cf8054821673b980d88ae1e9599096e6030fb5381483e4312f3117905560d0805490911673bcd418c12cd9910dd5b33b1f8ee47ecc562732fc179055801561184b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6040805160208101939093528281019190915260f89290921b6001600160f81b031916606082015281516041818303018152606190910190915290565b611896611dcd565b83838360006118a6848484611851565b905060d2816040516118b89190613187565b9081526040519081900360200190205460ff16156118e957604051638baa579f60e01b815260040160405180910390fd5b600160d2826040516118fb9190613187565b908152604051908190036020019020805491151560ff199092169190911790556119278888888861287f565b60405180604001604052806002815260200161032360f41b815250906119605760405162461bcd60e51b81526004016104c391906131cf565b5061196e6040860186613266565b905061197d6020870187613266565b90501460405180604001604052806002815260200161199960f11b815250906119b95760405162461bcd60e51b81526004016104c391906131cf565b506119c76080860186613266565b90506119d66020870187613266565b90501460405180604001604052806002815260200161199960f11b81525090611a125760405162461bcd60e51b81526004016104c391906131cf565b50611a206060860186613266565b9050611a2f6020870187613266565b90501460405180604001604052806002815260200161199960f11b81525090611a6b5760405162461bcd60e51b81526004016104c391906131cf565b50611a796080860186613266565b9050611a886020870187613266565b90501460405180604001604052806002815260200161199960f11b81525090611ac45760405162461bcd60e51b81526004016104c391906131cf565b506040516c66697865642d6c697374696e6760981b6020820152602d0160408051601f198184030181529190528051602090910120611b0660a08701876132b7565b604051602001611b17929190613177565b604051602081830303815290604052805190602001201415611c265760005b611b436020870187613266565b9050811015611c2057611c0e6001611b5e6060890189613266565b84818110611b6e57611b6e6133b3565b90506020020135888060400190611b859190613266565b85818110611b9557611b956133b3565b90506020020135338a8060800190611bad9190613266565b87818110611bbd57611bbd6133b3565b9050602002016020810190611bd29190612e32565b611bdf60208d018d613266565b88818110611bef57611bef6133b3565b905060200201358c6000016020810190611c099190612e32565b612ac6565b80611c1881613382565b915050611b36565b50610ac8565b6040516e61756374696f6e2d6c697374696e6760881b6020820152602f0160408051601f198184030181529190528051602090910120611c6960a08701876132b7565b604051602001611c7a929190613177565b604051602081830303815290604052805190602001201415610a975760005b611ca66020870187613266565b9050811015611c2057611d426002611cc16060890189613266565b84818110611cd157611cd16133b3565b90506020020135888060400190611ce89190613266565b85818110611cf857611cf86133b3565b90506020020135898060800190611d0f9190613266565b86818110611d1f57611d1f6133b3565b9050602002016020810190611d349190612e32565b33611bdf60208d018d613266565b80611d4c81613382565b915050611c99565b611d5c612347565b6001600160a01b038116611dc15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c3565b611dca816123d6565b50565b60655460ff16156110115760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104c3565b604080518082018252600a8152694275636b6574496e666f60b01b6020918201528151808301835260018152603160f81b9082015290516000918291611e9f91600080516020613400833981519152917f2279716c091cf8f909ece992df3556f252808b497c784b00f1a12b44ae3022c9916000805160206133e08339815191529146913091016131a3565b60408051601f198184030181529190528051602090910120905060007fbaee57c22853a2d835dc147890f14d89b8096c9ef5306db25d721e80881383de611ee68580613266565b604051602001611ef792919061314b565b60405160208183030381529060405280519060200120858060200190611f1d9190613266565b604051602001611f2e92919061310b565b60405160208183030381529060405280519060200120868060400190611f549190613266565b604051602001611f6592919061310b565b60408051601f198184030181529190528051602090910120611f8a6060890189613266565b604051602001611f9b92919061314b565b60408051601f198184030181529190528051602090910120611fc060808a018a613266565b604051602001611fd192919061314b565b60408051601f198184030181529190528051602090910120611ff660a08b018b613266565b60405160200161200792919061314b565b60408051601f198184030181528282528051602091820120908301989098528101959095526060850193909352608084019190915260a083015260c08083019190915260e082019290925290850135610100820152610120015b604051602081830303815290604052805190602001209050600082826040516020016120a492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8c1692840192909252606083018a9052608083018990529092509060019060a0016020604051602081039080840390855afa15801561210f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661216d5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016104c3565b6097546001600160a01b038281169116146121c35760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103130b1b5b2b7321029b4b3b732b960511b60448201526064016104c3565b60019450505050505b949350505050565b600060038210604051806040016040528060028152602001610ccd60f21b815250906122135760405162461bcd60e51b81526004016104c391906131cf565b5060008261222d575060ca546001600160a01b031661225f565b8260011415612248575060cc546001600160a01b031661225f565b826002141561225f575060cd546001600160a01b03165b92915050565b6040516001600160a01b038085166024830152831660448201526064810182905261184b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b94565b604051635c46a7ef60e11b81526001600160a01b038481166004830152838116602483015260448201839052608060648301526000608483015285919082169063b88d4fde9060a401600060405180830381600087803b15801561233357600080fd5b505af1158015610ac6573d6000803e3d6000fd5b6033546001600160a01b031633146110115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c3565b6040516001600160a01b0383166024820152604481018290526123d190849063a9059cbb60e01b90606401612299565b505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080518082018252600c81526b554150436c61696d496e666f60a01b6020918201528151808301835260018152603160f81b90820152905160009182916124b691600080516020613400833981519152917f66ae614f98e84a274b1e2f8ae9c7105bcc5396f4f7485c4faaa760723c611f67916000805160206133e08339815191529146913091016131a3565b60405160208183030381529060405280519060200120905060007f6737a58dfe339646a3f7b30b34e73d559e237b2c26daed9663ee8d80afcf137984600001358560200160208101906125099190612e32565b604080516020810194909452838101929092526001600160a01b03166060830152850135608082015260a0015b6040516020818303038152906040528051906020012090506000828260405160200161257992919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff8c1692840192909252606083018a9052608083018990529092509060019060a0016020604051602081039080840390855afa1580156125e4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126425760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b60448201526064016104c3565b6097546001600160a01b038281169116146121c35760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016104c3565b604080518082018252600b81526a4e667453656c6c496e666f60a81b6020918201528151808301835260018152603160f81b908201529051600091829161272091600080516020613400833981519152917f27d8b3ddd167e115229538258ad3d27558dbdef7a5556e2fa4cbb190bdc12eef916000805160206133e08339815191529146913091016131a3565b60405160208183030381529060405280519060200120905060007fc910aba11f78c86ead99cd6532efb76116b5bad4094b6181ea089bfe09ce434b84600001358560200160208101906127739190612e32565b61278060408801886132b7565b60405161278e929190613177565b6040519081900390206127a76080890160608a01612e32565b6040805160208101969096528501939093526001600160a01b039182166060850152608084810191909152911660a0838101919091529086013560c0838101919091529086013560e08381019190915290860135610100838101919091529086013561012083015285013561014082015261016001612536565b600054610100900460ff166128485760405162461bcd60e51b81526004016104c39061321b565b611011612c69565b600054610100900460ff166128775760405162461bcd60e51b81526004016104c39061321b565b611011612c99565b604080518082018252600f81526e4c6f6f7442757953656c6c496e666f60881b6020918201528151808301835260018152603160f81b908201529051600091829161291091600080516020613400833981519152917f97d26990b85521d3f5574125c83b33fd13365e66bb370ed0b0afcc494be99ccb916000805160206133e08339815191529146913091016131a3565b60408051601f19818403018152919052805160209182012091506000907fd8b3f1e901e5f5bd4def19a204cae74fa7320bb2fadc67a212a37c4689ca82dd9061295b90860186612e32565b6129686020870187613266565b60405160200161297992919061314b565b6040516020818303038152906040528051906020012086806040019061299f9190613266565b6040516020016129b092919061314b565b60408051601f1981840301815291905280516020909101206129d56060890189613266565b6040516020016129e692919061314b565b60408051601f198184030181529190528051602090910120612a0b60808a018a613266565b604051602001612a1c92919061310b565b60408051601f198184030181529190528051602090910120612a4160a08b018b6132b7565b604051612a4f929190613177565b6040519081900381206120619796959493929160c08d01359060e08e0135906101008f013590602001998a526001600160a01b039890981660208a015260408901969096526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201526101400190565b612ace611dcd565b6000612ad9876121d4565b9050600061271060cb5488612aee9190613320565b612af891906132fe565b90506000612b06828961333f565b9050612b1d6001600160a01b038416888884612265565b60cf54612b39906001600160a01b03858116918a911685612265565b612b45848789886122d0565b7f6a74f267d518770174614633cca0ce832085d10a0ac3d9e957daab484448ce858a87898b8d8a8a604051612b8097969594939291906131e2565b60405180910390a150505050505050505050565b6000612be9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612ccc9092919063ffffffff16565b9050805160001480612c0a575080806020019051810190612c0a9190612e90565b6123d15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104c3565b600054610100900460ff16612c905760405162461bcd60e51b81526004016104c39061321b565b611011336123d6565b600054610100900460ff16612cc05760405162461bcd60e51b81526004016104c39061321b565b6065805460ff19169055565b60606121cc848460008585600080866001600160a01b03168587604051612cf39190613187565b60006040518083038185875af1925050503d8060008114612d30576040519150601f19603f3d011682016040523d82523d6000602084013e612d35565b606091505b5091509150612d4687838387612d51565b979650505050505050565b60608315612dbd578251612db6576001600160a01b0385163b612db65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104c3565b50816121cc565b6121cc8383815115612dd25781518083602001fd5b8060405162461bcd60e51b81526004016104c391906131cf565b80356001600160a01b0381168114612e0357600080fd5b919050565b60006101208284031215612e1b57600080fd5b50919050565b803560ff81168114612e0357600080fd5b600060208284031215612e4457600080fd5b612e4d82612dec565b9392505050565b600080600060608486031215612e6957600080fd5b612e7284612dec565b925060208401359150612e8760408501612dec565b90509250925092565b600060208284031215612ea257600080fd5b81518015158114612e4d57600080fd5b600060208284031215612ec457600080fd5b813567ffffffffffffffff80821115612edc57600080fd5b818401915084601f830112612ef057600080fd5b813581811115612f0257612f026133c9565b604051601f8201601f19908116603f01168101908382118183101715612f2a57612f2a6133c9565b81604052828152876020848701011115612f4357600080fd5b826020860160208301376000928101602001929092525095945050505050565b600060208284031215612f7557600080fd5b5035919050565b600060208284031215612f8e57600080fd5b5051919050565b600080600060608486031215612faa57600080fd5b612fb384612e21565b95602085013595506040909401359392505050565b60008060008060808587031215612fde57600080fd5b612fe785612e21565b93506020850135925060408501359150606085013567ffffffffffffffff81111561301157600080fd5b850160e0818803121561302357600080fd5b939692955090935050565b6000806000806080858703121561304457600080fd5b61304d85612e21565b93506020850135925060408501359150606085013567ffffffffffffffff81111561307757600080fd5b61308387828801612e08565b91505092959194509250565b60008060008084860360c08112156130a657600080fd5b6130af86612e21565b945060208601359350604086013592506060605f19820112156130d157600080fd5b509295919450926060019150565b600081518084526130f7816020860160208601613356565b601f01601f19169290920160200192915050565b60008184825b85811015613140576001600160a01b0361312a83612dec565b1683526020928301929190910190600101613111565b509095945050505050565b60006001600160fb1b0383111561316157600080fd5b8260051b80858437600092019182525092915050565b8183823760009101908152919050565b60008251613199818460208701613356565b9190910192915050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b602081526000612e4d60208301846130df565b9687526001600160a01b03958616602088015293851660408701526060860192909252608085015260a08401521660c082015260e00190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808335601e1984360301811261327d57600080fd5b83018035915067ffffffffffffffff82111561329857600080fd5b6020019150600581901b36038213156132b057600080fd5b9250929050565b6000808335601e198436030181126132ce57600080fd5b83018035915067ffffffffffffffff8211156132e957600080fd5b6020019150368190038213156132b057600080fd5b60008261331b57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561333a5761333a61339d565b500290565b6000828210156133515761335161339d565b500390565b60005b83811015613371578181015183820152602001613359565b8381111561184b5750506000910152565b60006000198214156133965761339661339d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfec89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400fa164736f6c6343000807000a608060405234801561001057600080fd5b50604051610a47380380610a4783398101604081905261002f9161020c565b610038336100c6565b6001600160a01b038316158061005557506001600160a01b038216155b8061006757506001600160a01b038116155b15610085576040516311c8d7a360e01b815260040160405180910390fd5b600180546001600160a01b038086166001600160a01b03199283161790925560028054928516929091169190911790556100be81610116565b50505061024f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61011e610194565b6001600160a01b0381166101885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610191816100c6565b50565b6000546001600160a01b031633146101ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017f565b565b80516001600160a01b038116811461020757600080fd5b919050565b60008060006060848603121561022157600080fd5b61022a846101f0565b9250610238602085016101f0565b9150610246604085016101f0565b90509250925092565b6107e98061025e6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806399c38ff91161005b57806399c38ff9146100bd578063abc8c7af146100d0578063de4607df146100e3578063f2fde38b146100f657600080fd5b80633ccfd60b14610082578063715018a61461008c5780638da5cb5b14610094575b600080fd5b61008a610109565b005b61008a6101e3565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61008a6100cb3660046106f8565b6101f7565b6002546100a1906001600160a01b031681565b6001546100a1906001600160a01b031681565b61008a6101043660046106d6565b6102de565b610111610357565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561015557600080fd5b505afa158015610169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018d9190610744565b6001549091506101a7906001600160a01b031633836103b1565b60408051338152602081018390527f4459ff64b3dd56d0612626d676235a3f71edb36f99760abf9a9bf111860e2541910160405180910390a150565b6101eb610357565b6101f56000610408565b565b6002546001600160a01b031633146102295760405163065ece9760e51b81523360048201526024015b60405180910390fd5b6001546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b15801561026c57600080fd5b505afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190610744565b10156102c35760405163cc7744d560e01b815260040160405180910390fd5b6001546102da906001600160a01b031683836103b1565b5050565b6102e6610357565b6001600160a01b03811661034b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610220565b61035481610408565b50565b6000546001600160a01b031633146101f55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610220565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610403908490610458565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006104ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661052d9092919063ffffffff16565b90508051600014806104ce5750808060200190518101906104ce9190610722565b6104035760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610220565b606061053c8484600085610544565b949350505050565b6060824710156105a55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610220565b600080866001600160a01b031685876040516105c1919061075d565b60006040518083038185875af1925050503d80600081146105fe576040519150601f19603f3d011682016040523d82523d6000602084013e610603565b606091505b50915091506106148783838761061f565b979650505050505050565b6060831561068b578251610684576001600160a01b0385163b6106845760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610220565b508161053c565b61053c83838151156106a05781518083602001fd5b8060405162461bcd60e51b81526004016102209190610779565b80356001600160a01b03811681146106d157600080fd5b919050565b6000602082840312156106e857600080fd5b6106f1826106ba565b9392505050565b6000806040838503121561070b57600080fd5b610714836106ba565b946020939093013593505050565b60006020828403121561073457600080fd5b815180151581146106f157600080fd5b60006020828403121561075657600080fd5b5051919050565b6000825161076f8184602087016107ac565b9190910192915050565b60208152600082518060208401526107988160408501602087016107ac565b601f01601f19169190910160400192915050565b60005b838110156107c75781810151838201526020016107af565b838111156107d6576000848401525b5050505056fea164736f6c6343000807000a0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d616c72656164792063616c696d656420746f6b656e20616d6f756e7400000000a164736f6c6343000807000a";

type UAPConstructorParams =
  | [signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>;

const isSuperArgs = (
  xs: UAPConstructorParams
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;

export class UAP__factory extends ContractFactory {
  constructor(...args: UAPConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args);
    } else {
      super(_abi, _bytecode, args[0]);
    }
  }

  override deploy(overrides?: Overrides & { from?: string }): Promise<UAP> {
    return super.deploy(overrides || {}) as Promise<UAP>;
  }
  override getDeployTransaction(
    overrides?: Overrides & { from?: string }
  ): TransactionRequest {
    return super.getDeployTransaction(overrides || {});
  }
  override attach(address: string): UAP {
    return super.attach(address) as UAP;
  }
  override connect(signer: Signer): UAP__factory {
    return super.connect(signer) as UAP__factory;
  }

  static readonly bytecode = _bytecode;
  static readonly abi = _abi;
  static createInterface(): UAPInterface {
    return new utils.Interface(_abi) as UAPInterface;
  }
  static connect(address: string, signerOrProvider: Signer | Provider): UAP {
    return new Contract(address, _abi, signerOrProvider) as UAP;
  }
}
