{
  "_format": "hh-sol-artifact-1",
  "contractName": "UniswapV3Adapter",
  "sourceName": "solidity/contracts/adapters/UniswapV3Adapter.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IStaticOracle",
              "name": "uniswapV3Oracle",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "maxPeriod",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "minPeriod",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "initialPeriod",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "superAdmin",
              "type": "address"
            },
            {
              "internalType": "address[]",
              "name": "initialAdmins",
              "type": "address[]"
            }
          ],
          "internalType": "struct IUniswapV3Adapter.InitialConfig",
          "name": "_initialConfig",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "GasTooLow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidCardinalityPerMinute",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDenylistParams",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidGasCostToSupportPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidGasPerCardinality",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "period",
          "type": "uint32"
        }
      ],
      "name": "InvalidPeriod",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "PairCannotBeSupported",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "PairNotSupportedYet",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "cardinalityPerMinute",
          "type": "uint8"
        }
      ],
      "name": "CardinalityPerMinuteChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "indexed": false,
          "internalType": "struct IUniswapV3Adapter.Pair[]",
          "name": "pairs",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "bool[]",
          "name": "denylisted",
          "type": "bool[]"
        }
      ],
      "name": "DenylistChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint112",
          "name": "gasCostToSupportPool",
          "type": "uint112"
        }
      ],
      "name": "GasCostToSupportPoolChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint104",
          "name": "gasPerCardinality",
          "type": "uint104"
        }
      ],
      "name": "GasPerCardinalityChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "period",
          "type": "uint32"
        }
      ],
      "name": "PeriodChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "preparedPools",
          "type": "uint256"
        }
      ],
      "name": "UpdatedSupport",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_PERIOD",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_PERIOD",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUPER_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNISWAP_V3_ORACLE",
      "outputs": [
        {
          "internalType": "contract IStaticOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "addOrModifySupportForPair",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "addSupportForPairIfNeeded",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "canSupportPair",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cardinalityPerMinute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasCostToSupportPool",
      "outputs": [
        {
          "internalType": "uint112",
          "name": "",
          "type": "uint112"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasPerCardinality",
      "outputs": [
        {
          "internalType": "uint104",
          "name": "",
          "type": "uint104"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "getPoolsPreparedForPair",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "isPairAlreadySupported",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenB",
          "type": "address"
        }
      ],
      "name": "isPairDenylisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "period",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenIn",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_tokenOut",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_cardinalityPerMinute",
          "type": "uint8"
        }
      ],
      "name": "setCardinalityPerMinute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "internalType": "struct IUniswapV3Adapter.Pair[]",
          "name": "_pairs",
          "type": "tuple[]"
        },
        {
          "internalType": "bool[]",
          "name": "_denylisted",
          "type": "bool[]"
        }
      ],
      "name": "setDenylisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint112",
          "name": "_gasCostToSupportPool",
          "type": "uint112"
        }
      ],
      "name": "setGasCostToSupportPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint104",
          "name": "_gasPerCardinality",
          "type": "uint104"
        }
      ],
      "name": "setGasPerCardinality",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_newPeriod",
          "type": "uint32"
        }
      ],
      "name": "setPeriod",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "_interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e06040526001805464ffffffffff16737530000000000000000000000056ea00000000001790553480156200003457600080fd5b506040516200364338038062003643833981016040819052620000579162000497565b60808101516001600160a01b0316620000835760405163d92e233d60e01b815260040160405180910390fd5b80516001600160a01b0316608052602081015163ffffffff90811660a05260408201511660c052620000c56000805160206200360383398151915280620002f5565b620000ef6000805160206200362383398151915260008051602062003603833981519152620002f5565b620001146000805160206200360383398151915282608001516200034060201b60201c565b60005b8160a00151518110156200017b5762000166600080516020620036238339815191528360a001518381518110620001525762000152620005e9565b60200260200101516200034060201b60201c565b806200017281620005ff565b91505062000117565b5060c05163ffffffff16816060015163ffffffff161080620001ae575060a05163ffffffff16816060015163ffffffff16115b15620001df57606081015160405163155a20fb60e31b815263ffffffff909116600482015260240160405180910390fd5b60608101516001805463ffffffff191663ffffffff90921691821790556040519081527ff822214854e5620527e54c8a9293eb963df052efebe733964f7dea0be73f2c8a9060200160405180910390a160006080516001600160a01b031663b7604e536040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000272573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000298919062000627565b6001805460ff60201b191664010000000060ff8416908102919091179091556040519081529091507f0dfaaf3cfeb17bc2ce4be3c02afaeaab84c2778f74e4a9eacb553ae4a7ec1b089060200160405180910390a1505062000653565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200034c828262000350565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200034c576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156200042b576200042b620003f0565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200045c576200045c620003f0565b604052919050565b6001600160a01b03811681146200047a57600080fd5b50565b805163ffffffff811681146200049257600080fd5b919050565b60006020808385031215620004ab57600080fd5b82516001600160401b0380821115620004c357600080fd5b9084019060c08287031215620004d857600080fd5b620004e262000406565b8251620004ef8162000464565b8152620004fe8385016200047d565b8482015262000510604084016200047d565b604082015262000523606084016200047d565b60608201526080830151620005388162000464565b608082015260a0830151828111156200055057600080fd5b80840193505086601f8401126200056657600080fd5b8251828111156200057b576200057b620003f0565b8060051b92506200058e85840162000431565b8181529284018501928581019089851115620005a957600080fd5b948601945b84861015620005d75785519250620005c68362000464565b8282529486019490860190620005ae565b60a08401525090979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016200062057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156200063a57600080fd5b815160ff811681146200064c57600080fd5b9392505050565b60805160a05160c051612f5d620006a6600039600081816104950152610ac60152600081816104d10152610afb015260008181610328015281816108fd01528181610d990152611d240152612f5d6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806394aef92011610104578063d0831641116100a2578063da601e2011610071578063da601e201461053f578063dd7de37e14610552578063e996fe3814610565578063ef78d4fd1461057857600080fd5b8063d0831641146104f3578063d08a8a1914610506578063d0a26eb314610519578063d547741f1461052c57600080fd5b8063af3af4a2116100de578063af3af4a21461043d578063b8ec2d381461047d578063bbccf15414610490578063c810b7fe146104cc57600080fd5b806394aef920146103c6578063a217fddf14610415578063ac9650d81461041d57600080fd5b806359e3f7c81161017157806375b238fc1161014b57806375b238fc146102fc57806391256d621461032357806391d148541461036f5780639363edd6146103b357600080fd5b806359e3f7c8146102af57806362998c39146102c2578063734273fd146102e957600080fd5b80632f2ff15d116101ad5780632f2ff15d1461024d57806336568abe146102625780634460bdd61461027557806353783fe01461029c57600080fd5b806301ffc9a7146101d45780631f102920146101fc578063248a9ca31461021c575b600080fd5b6101e76101e2366004612337565b610588565b60405190151581526020015b60405180910390f35b61020f61020a36600461239b565b6105f3565b6040516101f39190612425565b61023f61022a366004612438565b60009081526020819052604090206001015490565b6040519081526020016101f3565b61026061025b366004612451565b61067f565b005b610260610270366004612451565b6106a9565b61023f7f7613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c4768981565b6102606102aa366004612476565b610761565b6101e76102bd36600461239b565b610854565b6001546102d790640100000000900460ff1681565b60405160ff90911681526020016101f3565b6101e76102f736600461239b565b61087f565b61023f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761037d366004612451565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101e76103c136600461239b565b61097b565b6001546103f690720100000000000000000000000000000000000090046dffffffffffffffffffffffffffff1681565b6040516dffffffffffffffffffffffffffff90911681526020016101f3565b61023f600081565b61043061042b3660046124f2565b6109a5565b6040516101f39190612584565b60015461045f906501000000000090046cffffffffffffffffffffffffff1681565b6040516cffffffffffffffffffffffffff90911681526020016101f3565b61026061048b366004612604565b610a9a565b6104b77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f3565b6104b77f000000000000000000000000000000000000000000000000000000000000000081565b61026061050136600461262a565b610bcb565b61023f61051436600461269b565b610cb5565b61026061052736600461270e565b610e73565b61026061053a366004612451565b610e93565b61026061054d366004612782565b610eb8565b61026061056036600461270e565b610f89565b61026061057336600461279f565b610f95565b6001546104b79063ffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1a9e44e70000000000000000000000000000000000000000000000000000000014806105de57506105de82611177565b806105ed57506105ed8261120e565b92915050565b60606003600061060385856112b0565b815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561067257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610647575b5050505050905092915050565b60008281526020819052604090206001015461069a81611320565b6106a4838361132d565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61075d828261141d565b5050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561078b81611320565b816dffffffffffffffffffffffffffff166000036107d5576040517f46a5df1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805471ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000006dffffffffffffffffffffffffffff8516908102919091179091556040519081527f61bd8796b02321212a9970ee8e2a44943c485d8b8fdfab982b96c68ca3ffc60a906020015b60405180910390a15050565b60006002600061086485856112b0565b815260208101919091526040016000205460ff169392505050565b60006002600061088f85856112b0565b815260208101919091526040016000205460ff16156108b0575060006105ed565b6040517f62d9911900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301527f000000000000000000000000000000000000000000000000000000000000000016906362d9911990604401600060405180830381865afa92505050801561096557506040513d6000823e601f3d908101601f19168201604052610962919081019061286c565b60015b610971575060006105ed565b51151590506105ed565b6000806003600061098c86866112b0565b8152602081019190915260400160002054119392505050565b60608167ffffffffffffffff8111156109c0576109c061282d565b6040519080825280602002602001820160405280156109f357816020015b60608152602001906001900390816109de5790505b50905060005b82811015610a9357610a6330858584818110610a1757610a17612931565b9050602002810190610a299190612960565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d492505050565b828281518110610a7557610a75612931565b60200260200101819052508080610a8b906129f4565b9150506109f9565b5092915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ac481611320565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff161080610b2957507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff16115b15610b68576040517faad107d800000000000000000000000000000000000000000000000000000000815263ffffffff8316600482015260240161074a565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff84169081179091556040519081527ff822214854e5620527e54c8a9293eb963df052efebe733964f7dea0be73f2c8a90602001610848565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610bf581611320565b816cffffffffffffffffffffffffff16600003610c3e576040517f5022968f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffff00000000000000000000000000ffffffffff16650100000000006cffffffffffffffffffffffffff8516908102919091179091556040519081527fa323e719301552d61381aff34dca22ad499eaf05bc62d914aac932c8818f255890602001610848565b60008060036000610cc689886112b0565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610d3557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d0a575b505050505090508051600003610d97576040517f75fcccb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80891660048301528616602482015260440161074a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307f7ca9f610ddc88611500565b6001546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152610e2792918c918b91889163ffffffff90911690600401612a2c565b602060405180830381865afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190612a95565b979650505050505050565b610e7d848461097b565b610e8d57610e8d848484846115a6565b50505050565b600082815260208190526040902060010154610eae81611320565b6106a4838361141d565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ee281611320565b8160ff16600003610f1f576040517ffb45314200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000060ff8516908102919091179091556040519081527f0dfaaf3cfeb17bc2ce4be3c02afaeaab84c2778f74e4a9eacb553ae4a7ec1b0890602001610848565b610e8d848484846115a6565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610fbf81611320565b838214610ff8576040517fea0cbfd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8481101561113257600061105f87878481811061101a5761101a612931565b6110309260206040909202019081019150612aae565b88888581811061104257611042612931565b905060400201602001602081019061105a9190612aae565b6112b0565b905084848381811061107357611073612931565b90506020020160208101906110889190612ad9565b600082815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558484838181106110d5576110d5612931565b90506020020160208101906110ea9190612ad9565b8015611103575060008181526003602052604090205415155b1561111f57600081815260036020526040812061111f91612309565b508061112a816129f4565b915050610ffb565b507f61dc2ee022375a12edeb878648cef7f34415191216b80dda488193d5370016cd858585856040516111689493929190612af6565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105ed565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3d7499ff0000000000000000000000000000000000000000000000000000000014806112a157507fffffffff0000000000000000000000000000000000000000000000000000000082167fac9650d800000000000000000000000000000000000000000000000000000000145b806105ed57506105ed82611177565b60008060006112bf8585611aaf565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b1660348201529193509150604801604051602081830303815290604052805190602001209250505092915050565b61132a8133611afa565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661075d5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556113bf3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561075d5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606114f98383604051806060016040528060278152602001612f0160279139611bac565b9392505050565b60006fffffffffffffffffffffffffffffffff8211156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161074a565b5090565b60006115b285856112b0565b60008181526002602052604090205490915060ff161561161e576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80871660048301528516602482015260440161074a565b600061162a8686611cd4565b90508051600003611687576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80881660048301528616602482015260440161074a565b60008281526003602052604081208054600154919290916cffffffffffffffffffffffffff65010000000000820416916dffffffffffffffffffffffffffff720100000000000000000000000000000000000083041691603c906116fc9060ff6401000000008204169063ffffffff16612bac565b6117069190612bd8565b611711906001612c22565b90506000805b875181101561198957600088828151811061173457611734612931565b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190612c4f565b50509450505050508461ffff168161ffff1610156118a3576000866cffffffffffffffffffffffffff89166117e48489612ce8565b61ffff166117f29190612d03565b6117fc9190612d30565b90505a816dffffffffffffffffffffffffffff16111561181e57505050611977565b6040517f32148f6700000000000000000000000000000000000000000000000000000000815261ffff8716600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f6790602401600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505b87841015611916578189856118b7816129f4565b9650815481106118c9576118c9612931565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611974565b8854600181018a5560008a8152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905583611970816129f4565b9450505b50505b80611981816129f4565b915050611717565b50806000036119c4576040517f858c897400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805b85811015611a4857868054806119de576119de612d57565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905580611a40816129f4565b9150506119c6565b506040805173ffffffffffffffffffffffffffffffffffffffff808f1682528d1660208201529081018290527f9f7cdddf03776c6c92464bed6998f3e7ee86525925364cb4093654fef3b775da9060600160405180910390a1505050505050505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611aec578284611aef565b83835b909590945092505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661075d57611b508173ffffffffffffffffffffffffffffffffffffffff166014612073565b611b5b836020612073565b604051602001611b6c929190612d86565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261074a91600401612e07565b606073ffffffffffffffffffffffffffffffffffffffff84163b611c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161074a565b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611c7a9190612e1a565b600060405180830381855af49150503d8060008114611cb5576040519150601f19603f3d011682016040523d82523d6000602084013e611cba565b606091505b5091509150611cca8282866122b6565b9695505050505050565b6040517f62d9911900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526060917f0000000000000000000000000000000000000000000000000000000000000000909116906362d9911990604401600060405180830381865afa158015611d6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d95919081019061286c565b90506001815111156105ed576000815167ffffffffffffffff811115611dbd57611dbd61282d565b604051908082528060200260200182016040528015611de6578160200160208202803683370190505b50905060005b8251811015611ec257828181518110611e0757611e07612931565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d9190612e36565b828281518110611e8f57611e8f612931565b6fffffffffffffffffffffffffffffffff9092166020928302919091019091015280611eba816129f4565b915050611dec565b5060005b60018351611ed49190612e68565b81101561206b57806000611ee9826001612e7b565b90505b8451811015611f6957838281518110611f0757611f07612931565b60200260200101516fffffffffffffffffffffffffffffffff16848281518110611f3357611f33612931565b60200260200101516fffffffffffffffffffffffffffffffff161115611f57578091505b80611f61816129f4565b915050611eec565b5081811461205857838181518110611f8357611f83612931565b6020026020010151848381518110611f9d57611f9d612931565b6020026020010151858481518110611fb757611fb7612931565b60200260200101868481518110611fd057611fd0612931565b73ffffffffffffffffffffffffffffffffffffffff938416602091820292909201015291169052825183908390811061200b5761200b612931565b602002602001015183828151811061202557612025612931565b60200260200101906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250505b5080612063816129f4565b915050611ec6565b505092915050565b60606000612082836002612e8e565b61208d906002612e7b565b67ffffffffffffffff8111156120a5576120a561282d565b6040519080825280601f01601f1916602001820160405280156120cf576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061210657612106612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061216957612169612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006121a5846002612e8e565b6121b0906001612e7b565b90505b600181111561224d577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106121f1576121f1612931565b1a60f81b82828151811061220757612207612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361224681612ecb565b90506121b3565b5083156114f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161074a565b606083156122c55750816114f9565b8251156122d55782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a9190612e07565b508054600082559060005260206000209081019061132a91905b808211156115a25760008155600101612323565b60006020828403121561234957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461132a57600080fd5b600080604083850312156123ae57600080fd5b82356123b981612379565b915060208301356123c981612379565b809150509250929050565b600081518084526020808501945080840160005b8381101561241a57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016123e8565b509495945050505050565b6020815260006114f960208301846123d4565b60006020828403121561244a57600080fd5b5035919050565b6000806040838503121561246457600080fd5b8235915060208301356123c981612379565b60006020828403121561248857600080fd5b81356dffffffffffffffffffffffffffff811681146114f957600080fd5b60008083601f8401126124b857600080fd5b50813567ffffffffffffffff8111156124d057600080fd5b6020830191508360208260051b85010111156124eb57600080fd5b9250929050565b6000806020838503121561250557600080fd5b823567ffffffffffffffff81111561251c57600080fd5b612528858286016124a6565b90969095509350505050565b60005b8381101561254f578181015183820152602001612537565b50506000910152565b60008151808452612570816020860160208601612534565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526125e5858351612558565b945092850192908501906001016125ab565b5092979650505050505050565b60006020828403121561261657600080fd5b813563ffffffff811681146114f957600080fd5b60006020828403121561263c57600080fd5b81356cffffffffffffffffffffffffff811681146114f957600080fd5b60008083601f84011261266b57600080fd5b50813567ffffffffffffffff81111561268357600080fd5b6020830191508360208285010111156124eb57600080fd5b6000806000806000608086880312156126b357600080fd5b85356126be81612379565b94506020860135935060408601356126d581612379565b9250606086013567ffffffffffffffff8111156126f157600080fd5b6126fd88828901612659565b969995985093965092949392505050565b6000806000806060858703121561272457600080fd5b843561272f81612379565b9350602085013561273f81612379565b9250604085013567ffffffffffffffff81111561275b57600080fd5b61276787828801612659565b95989497509550505050565b60ff8116811461132a57600080fd5b60006020828403121561279457600080fd5b81356114f981612773565b600080600080604085870312156127b557600080fd5b843567ffffffffffffffff808211156127cd57600080fd5b818701915087601f8301126127e157600080fd5b8135818111156127f057600080fd5b8860208260061b850101111561280557600080fd5b60209283019650945090860135908082111561282057600080fd5b50612767878288016124a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805161286781612379565b919050565b6000602080838503121561287f57600080fd5b825167ffffffffffffffff8082111561289757600080fd5b818501915085601f8301126128ab57600080fd5b8151818111156128bd576128bd61282d565b8060051b604051601f19603f830116810181811085821117156128e2576128e261282d565b60405291825284820192508381018501918883111561290057600080fd5b938501935b82851015612925576129168561285c565b84529385019392850192612905565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261299557600080fd5b83018035915067ffffffffffffffff8211156129b057600080fd5b6020019150368190038213156124eb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a2557612a256129c5565b5060010190565b6fffffffffffffffffffffffffffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff808716602084015280861660408401525060a06060830152612a7d60a08301856123d4565b905063ffffffff831660808301529695505050505050565b600060208284031215612aa757600080fd5b5051919050565b600060208284031215612ac057600080fd5b81356114f981612379565b801515811461132a57600080fd5b600060208284031215612aeb57600080fd5b81356114f981612acb565b60408082528181018590526000908660608401835b88811015612b5d578235612b1e81612379565b73ffffffffffffffffffffffffffffffffffffffff908116835260209084820135612b4881612379565b16908301529183019190830190600101612b0b565b508481036020868101919091528682529250820190508560005b86811015612b9e578135612b8a81612acb565b151583529183019190830190600101612b77565b509098975050505050505050565b600063ffffffff80831681851681830481118215151615612bcf57612bcf6129c5565b02949350505050565b600063ffffffff80841680612c16577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b61ffff818116838216019080821115610a9357610a936129c5565b805161ffff8116811461286757600080fd5b600080600080600080600060e0888a031215612c6a57600080fd5b8751612c7581612379565b8097505060208801518060020b8114612c8d57600080fd5b9550612c9b60408901612c3d565b9450612ca960608901612c3d565b9350612cb760808901612c3d565b925060a0880151612cc781612773565b60c0890151909250612cd881612acb565b8091505092959891949750929550565b61ffff828116828216039080821115610a9357610a936129c5565b60006dffffffffffffffffffffffffffff80831681851681830481118215151615612bcf57612bcf6129c5565b6dffffffffffffffffffffffffffff818116838216019080821115610a9357610a936129c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612dbe816017850160208801612534565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612dfb816028840160208801612534565b01602801949350505050565b6020815260006114f96020830184612558565b60008251612e2c818460208701612534565b9190910192915050565b600060208284031215612e4857600080fd5b81516fffffffffffffffffffffffffffffffff811681146114f957600080fd5b818103818111156105ed576105ed6129c5565b808201808211156105ed576105ed6129c5565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ec657612ec66129c5565b500290565b600081612eda57612eda6129c5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4aaee62fae1df7422d2a45d8f0cd117d074bca7c1b16e4f6a5ee5253819892864736f6c634300081000337613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c47689a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806394aef92011610104578063d0831641116100a2578063da601e2011610071578063da601e201461053f578063dd7de37e14610552578063e996fe3814610565578063ef78d4fd1461057857600080fd5b8063d0831641146104f3578063d08a8a1914610506578063d0a26eb314610519578063d547741f1461052c57600080fd5b8063af3af4a2116100de578063af3af4a21461043d578063b8ec2d381461047d578063bbccf15414610490578063c810b7fe146104cc57600080fd5b806394aef920146103c6578063a217fddf14610415578063ac9650d81461041d57600080fd5b806359e3f7c81161017157806375b238fc1161014b57806375b238fc146102fc57806391256d621461032357806391d148541461036f5780639363edd6146103b357600080fd5b806359e3f7c8146102af57806362998c39146102c2578063734273fd146102e957600080fd5b80632f2ff15d116101ad5780632f2ff15d1461024d57806336568abe146102625780634460bdd61461027557806353783fe01461029c57600080fd5b806301ffc9a7146101d45780631f102920146101fc578063248a9ca31461021c575b600080fd5b6101e76101e2366004612337565b610588565b60405190151581526020015b60405180910390f35b61020f61020a36600461239b565b6105f3565b6040516101f39190612425565b61023f61022a366004612438565b60009081526020819052604090206001015490565b6040519081526020016101f3565b61026061025b366004612451565b61067f565b005b610260610270366004612451565b6106a9565b61023f7f7613a25ecc738585a232ad50a301178f12b3ba8887d13e138b523c4269c4768981565b6102606102aa366004612476565b610761565b6101e76102bd36600461239b565b610854565b6001546102d790640100000000900460ff1681565b60405160ff90911681526020016101f3565b6101e76102f736600461239b565b61087f565b61023f7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761037d366004612451565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101e76103c136600461239b565b61097b565b6001546103f690720100000000000000000000000000000000000090046dffffffffffffffffffffffffffff1681565b6040516dffffffffffffffffffffffffffff90911681526020016101f3565b61023f600081565b61043061042b3660046124f2565b6109a5565b6040516101f39190612584565b60015461045f906501000000000090046cffffffffffffffffffffffffff1681565b6040516cffffffffffffffffffffffffff90911681526020016101f3565b61026061048b366004612604565b610a9a565b6104b77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f3565b6104b77f000000000000000000000000000000000000000000000000000000000000000081565b61026061050136600461262a565b610bcb565b61023f61051436600461269b565b610cb5565b61026061052736600461270e565b610e73565b61026061053a366004612451565b610e93565b61026061054d366004612782565b610eb8565b61026061056036600461270e565b610f89565b61026061057336600461279f565b610f95565b6001546104b79063ffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1a9e44e70000000000000000000000000000000000000000000000000000000014806105de57506105de82611177565b806105ed57506105ed8261120e565b92915050565b60606003600061060385856112b0565b815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561067257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610647575b5050505050905092915050565b60008281526020819052604090206001015461069a81611320565b6106a4838361132d565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61075d828261141d565b5050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561078b81611320565b816dffffffffffffffffffffffffffff166000036107d5576040517f46a5df1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805471ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000006dffffffffffffffffffffffffffff8516908102919091179091556040519081527f61bd8796b02321212a9970ee8e2a44943c485d8b8fdfab982b96c68ca3ffc60a906020015b60405180910390a15050565b60006002600061086485856112b0565b815260208101919091526040016000205460ff169392505050565b60006002600061088f85856112b0565b815260208101919091526040016000205460ff16156108b0575060006105ed565b6040517f62d9911900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301527f000000000000000000000000000000000000000000000000000000000000000016906362d9911990604401600060405180830381865afa92505050801561096557506040513d6000823e601f3d908101601f19168201604052610962919081019061286c565b60015b610971575060006105ed565b51151590506105ed565b6000806003600061098c86866112b0565b8152602081019190915260400160002054119392505050565b60608167ffffffffffffffff8111156109c0576109c061282d565b6040519080825280602002602001820160405280156109f357816020015b60608152602001906001900390816109de5790505b50905060005b82811015610a9357610a6330858584818110610a1757610a17612931565b9050602002810190610a299190612960565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d492505050565b828281518110610a7557610a75612931565b60200260200101819052508080610a8b906129f4565b9150506109f9565b5092915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ac481611320565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff161080610b2957507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff16115b15610b68576040517faad107d800000000000000000000000000000000000000000000000000000000815263ffffffff8316600482015260240161074a565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff84169081179091556040519081527ff822214854e5620527e54c8a9293eb963df052efebe733964f7dea0be73f2c8a90602001610848565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610bf581611320565b816cffffffffffffffffffffffffff16600003610c3e576040517f5022968f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffff00000000000000000000000000ffffffffff16650100000000006cffffffffffffffffffffffffff8516908102919091179091556040519081527fa323e719301552d61381aff34dca22ad499eaf05bc62d914aac932c8818f255890602001610848565b60008060036000610cc689886112b0565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610d3557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610d0a575b505050505090508051600003610d97576040517f75fcccb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80891660048301528616602482015260440161074a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307f7ca9f610ddc88611500565b6001546040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152610e2792918c918b91889163ffffffff90911690600401612a2c565b602060405180830381865afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190612a95565b979650505050505050565b610e7d848461097b565b610e8d57610e8d848484846115a6565b50505050565b600082815260208190526040902060010154610eae81611320565b6106a4838361141d565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610ee281611320565b8160ff16600003610f1f576040517ffb45314200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff1664010000000060ff8516908102919091179091556040519081527f0dfaaf3cfeb17bc2ce4be3c02afaeaab84c2778f74e4a9eacb553ae4a7ec1b0890602001610848565b610e8d848484846115a6565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610fbf81611320565b838214610ff8576040517fea0cbfd800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8481101561113257600061105f87878481811061101a5761101a612931565b6110309260206040909202019081019150612aae565b88888581811061104257611042612931565b905060400201602001602081019061105a9190612aae565b6112b0565b905084848381811061107357611073612931565b90506020020160208101906110889190612ad9565b600082815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558484838181106110d5576110d5612931565b90506020020160208101906110ea9190612ad9565b8015611103575060008181526003602052604090205415155b1561111f57600081815260036020526040812061111f91612309565b508061112a816129f4565b915050610ffb565b507f61dc2ee022375a12edeb878648cef7f34415191216b80dda488193d5370016cd858585856040516111689493929190612af6565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105ed565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3d7499ff0000000000000000000000000000000000000000000000000000000014806112a157507fffffffff0000000000000000000000000000000000000000000000000000000082167fac9650d800000000000000000000000000000000000000000000000000000000145b806105ed57506105ed82611177565b60008060006112bf8585611aaf565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b1660348201529193509150604801604051602081830303815290604052805190602001209250505092915050565b61132a8133611afa565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661075d5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556113bf3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561075d5760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60606114f98383604051806060016040528060278152602001612f0160279139611bac565b9392505050565b60006fffffffffffffffffffffffffffffffff8211156115a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161074a565b5090565b60006115b285856112b0565b60008181526002602052604090205490915060ff161561161e576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80871660048301528516602482015260440161074a565b600061162a8686611cd4565b90508051600003611687576040517f2eb4e23d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80881660048301528616602482015260440161074a565b60008281526003602052604081208054600154919290916cffffffffffffffffffffffffff65010000000000820416916dffffffffffffffffffffffffffff720100000000000000000000000000000000000083041691603c906116fc9060ff6401000000008204169063ffffffff16612bac565b6117069190612bd8565b611711906001612c22565b90506000805b875181101561198957600088828151811061173457611734612931565b6020026020010151905060008173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af9190612c4f565b50509450505050508461ffff168161ffff1610156118a3576000866cffffffffffffffffffffffffff89166117e48489612ce8565b61ffff166117f29190612d03565b6117fc9190612d30565b90505a816dffffffffffffffffffffffffffff16111561181e57505050611977565b6040517f32148f6700000000000000000000000000000000000000000000000000000000815261ffff8716600482015273ffffffffffffffffffffffffffffffffffffffff8416906332148f6790602401600060405180830381600087803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505b87841015611916578189856118b7816129f4565b9650815481106118c9576118c9612931565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611974565b8854600181018a5560008a8152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841617905583611970816129f4565b9450505b50505b80611981816129f4565b915050611717565b50806000036119c4576040517f858c897400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805b85811015611a4857868054806119de576119de612d57565b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905501905580611a40816129f4565b9150506119c6565b506040805173ffffffffffffffffffffffffffffffffffffffff808f1682528d1660208201529081018290527f9f7cdddf03776c6c92464bed6998f3e7ee86525925364cb4093654fef3b775da9060600160405180910390a1505050505050505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611aec578284611aef565b83835b909590945092505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661075d57611b508173ffffffffffffffffffffffffffffffffffffffff166014612073565b611b5b836020612073565b604051602001611b6c929190612d86565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261074a91600401612e07565b606073ffffffffffffffffffffffffffffffffffffffff84163b611c52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161074a565b6000808573ffffffffffffffffffffffffffffffffffffffff1685604051611c7a9190612e1a565b600060405180830381855af49150503d8060008114611cb5576040519150601f19603f3d011682016040523d82523d6000602084013e611cba565b606091505b5091509150611cca8282866122b6565b9695505050505050565b6040517f62d9911900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526060917f0000000000000000000000000000000000000000000000000000000000000000909116906362d9911990604401600060405180830381865afa158015611d6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d95919081019061286c565b90506001815111156105ed576000815167ffffffffffffffff811115611dbd57611dbd61282d565b604051908082528060200260200182016040528015611de6578160200160208202803683370190505b50905060005b8251811015611ec257828181518110611e0757611e07612931565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7d9190612e36565b828281518110611e8f57611e8f612931565b6fffffffffffffffffffffffffffffffff9092166020928302919091019091015280611eba816129f4565b915050611dec565b5060005b60018351611ed49190612e68565b81101561206b57806000611ee9826001612e7b565b90505b8451811015611f6957838281518110611f0757611f07612931565b60200260200101516fffffffffffffffffffffffffffffffff16848281518110611f3357611f33612931565b60200260200101516fffffffffffffffffffffffffffffffff161115611f57578091505b80611f61816129f4565b915050611eec565b5081811461205857838181518110611f8357611f83612931565b6020026020010151848381518110611f9d57611f9d612931565b6020026020010151858481518110611fb757611fb7612931565b60200260200101868481518110611fd057611fd0612931565b73ffffffffffffffffffffffffffffffffffffffff938416602091820292909201015291169052825183908390811061200b5761200b612931565b602002602001015183828151811061202557612025612931565b60200260200101906fffffffffffffffffffffffffffffffff1690816fffffffffffffffffffffffffffffffff16815250505b5080612063816129f4565b915050611ec6565b505092915050565b60606000612082836002612e8e565b61208d906002612e7b565b67ffffffffffffffff8111156120a5576120a561282d565b6040519080825280601f01601f1916602001820160405280156120cf576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061210657612106612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061216957612169612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006121a5846002612e8e565b6121b0906001612e7b565b90505b600181111561224d577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106121f1576121f1612931565b1a60f81b82828151811061220757612207612931565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361224681612ecb565b90506121b3565b5083156114f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161074a565b606083156122c55750816114f9565b8251156122d55782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a9190612e07565b508054600082559060005260206000209081019061132a91905b808211156115a25760008155600101612323565b60006020828403121561234957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114f957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461132a57600080fd5b600080604083850312156123ae57600080fd5b82356123b981612379565b915060208301356123c981612379565b809150509250929050565b600081518084526020808501945080840160005b8381101561241a57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016123e8565b509495945050505050565b6020815260006114f960208301846123d4565b60006020828403121561244a57600080fd5b5035919050565b6000806040838503121561246457600080fd5b8235915060208301356123c981612379565b60006020828403121561248857600080fd5b81356dffffffffffffffffffffffffffff811681146114f957600080fd5b60008083601f8401126124b857600080fd5b50813567ffffffffffffffff8111156124d057600080fd5b6020830191508360208260051b85010111156124eb57600080fd5b9250929050565b6000806020838503121561250557600080fd5b823567ffffffffffffffff81111561251c57600080fd5b612528858286016124a6565b90969095509350505050565b60005b8381101561254f578181015183820152602001612537565b50506000910152565b60008151808452612570816020860160208601612534565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526125e5858351612558565b945092850192908501906001016125ab565b5092979650505050505050565b60006020828403121561261657600080fd5b813563ffffffff811681146114f957600080fd5b60006020828403121561263c57600080fd5b81356cffffffffffffffffffffffffff811681146114f957600080fd5b60008083601f84011261266b57600080fd5b50813567ffffffffffffffff81111561268357600080fd5b6020830191508360208285010111156124eb57600080fd5b6000806000806000608086880312156126b357600080fd5b85356126be81612379565b94506020860135935060408601356126d581612379565b9250606086013567ffffffffffffffff8111156126f157600080fd5b6126fd88828901612659565b969995985093965092949392505050565b6000806000806060858703121561272457600080fd5b843561272f81612379565b9350602085013561273f81612379565b9250604085013567ffffffffffffffff81111561275b57600080fd5b61276787828801612659565b95989497509550505050565b60ff8116811461132a57600080fd5b60006020828403121561279457600080fd5b81356114f981612773565b600080600080604085870312156127b557600080fd5b843567ffffffffffffffff808211156127cd57600080fd5b818701915087601f8301126127e157600080fd5b8135818111156127f057600080fd5b8860208260061b850101111561280557600080fd5b60209283019650945090860135908082111561282057600080fd5b50612767878288016124a6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b805161286781612379565b919050565b6000602080838503121561287f57600080fd5b825167ffffffffffffffff8082111561289757600080fd5b818501915085601f8301126128ab57600080fd5b8151818111156128bd576128bd61282d565b8060051b604051601f19603f830116810181811085821117156128e2576128e261282d565b60405291825284820192508381018501918883111561290057600080fd5b938501935b82851015612925576129168561285c565b84529385019392850192612905565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261299557600080fd5b83018035915067ffffffffffffffff8211156129b057600080fd5b6020019150368190038213156124eb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a2557612a256129c5565b5060010190565b6fffffffffffffffffffffffffffffffff86168152600073ffffffffffffffffffffffffffffffffffffffff808716602084015280861660408401525060a06060830152612a7d60a08301856123d4565b905063ffffffff831660808301529695505050505050565b600060208284031215612aa757600080fd5b5051919050565b600060208284031215612ac057600080fd5b81356114f981612379565b801515811461132a57600080fd5b600060208284031215612aeb57600080fd5b81356114f981612acb565b60408082528181018590526000908660608401835b88811015612b5d578235612b1e81612379565b73ffffffffffffffffffffffffffffffffffffffff908116835260209084820135612b4881612379565b16908301529183019190830190600101612b0b565b508481036020868101919091528682529250820190508560005b86811015612b9e578135612b8a81612acb565b151583529183019190830190600101612b77565b509098975050505050505050565b600063ffffffff80831681851681830481118215151615612bcf57612bcf6129c5565b02949350505050565b600063ffffffff80841680612c16577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b61ffff818116838216019080821115610a9357610a936129c5565b805161ffff8116811461286757600080fd5b600080600080600080600060e0888a031215612c6a57600080fd5b8751612c7581612379565b8097505060208801518060020b8114612c8d57600080fd5b9550612c9b60408901612c3d565b9450612ca960608901612c3d565b9350612cb760808901612c3d565b925060a0880151612cc781612773565b60c0890151909250612cd881612acb565b8091505092959891949750929550565b61ffff828116828216039080821115610a9357610a936129c5565b60006dffffffffffffffffffffffffffff80831681851681830481118215151615612bcf57612bcf6129c5565b6dffffffffffffffffffffffffffff818116838216019080821115610a9357610a936129c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612dbe816017850160208801612534565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612dfb816028840160208801612534565b01602801949350505050565b6020815260006114f96020830184612558565b60008251612e2c818460208701612534565b9190910192915050565b600060208284031215612e4857600080fd5b81516fffffffffffffffffffffffffffffffff811681146114f957600080fd5b818103818111156105ed576105ed6129c5565b808201808211156105ed576105ed6129c5565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612ec657612ec66129c5565b500290565b600081612eda57612eda6129c5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d4aaee62fae1df7422d2a45d8f0cd117d074bca7c1b16e4f6a5ee5253819892864736f6c63430008100033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
