Address Details
contract
0x137de6B9F0b91f4eDE8ffecEC41cD91341ae5472
- Contract Name
- TestOracle
- Creator
- 0xd3c2ab–ffc681 at 0x8c2d2a–ad6144
- Balance
- 0 CELO ( )
- Locked CELO Balance
- 0.00 CELO
- Voting CELO Balance
- 0.00 CELO
- Pending Unlocked Gold
- 0.00 CELO
- Tokens
-
Fetching tokens...
- Transactions
- 9 Transactions
- Transfers
- 0 Transfers
- Gas Used
- 403,890
- Last Balance Update
- 18139861
This contract has been verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- TestOracle
- Optimization enabled
- true
- Compiler version
- v0.8.16+commit.07a7930e
- Optimization runs
- 800
- EVM Version
- london
- Verified at
- 2023-05-19T20:05:57.948057Z
contracts/test/TestOracle.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../access/Governable.sol"; // modified to operate without chainlink oracle contract TestOracle is Governable { uint256 public constant PRICE_BASE = 10**4; bool public isSpreadEnabled; mapping(uint256 => uint256) public prices; mapping(uint256 => uint256) public lastUpdatedTimes; mapping(uint256 => uint256) public maxPriceDiffs; mapping(uint256 => uint256) public spreads; mapping(address => bool) public keepers; event SetPrice(uint256 productId, uint256 price, uint256 timestamp); event SetMaxPriceDiff(uint256 productId, uint256 maxPriceDiff); event SetSpread(uint256 productId, uint256 spread); event SetIsSpreadEnabled(bool isSpreadEnabled); event SetKeeper(address keeper, bool isActive); modifier onlyKeeper() { require(keepers[msg.sender], "Oracle: !keeper"); _; } function getPrice(uint256 productId) public view returns (uint256) { (uint256 price, ) = getPriceAndSource(productId); return price; } function getPrices(uint256[] memory productIds) external view returns (uint256[] memory _prices) { _prices = new uint256[](productIds.length); for (uint256 i = 0; i < productIds.length; ++i) { _prices[i] = getPrice(productIds[i]); } } function getPrice(uint256 productId, bool isLong) external view returns (uint256) { (uint256 price, bool isChainlink) = getPriceAndSource(productId); if (isSpreadEnabled || isChainlink) { return isLong ? (price * (10**4 + spreads[productId])) / 10**4 : (price * (10**4 - spreads[productId])) / 10**4; } return price; } function getPriceAndSource(uint256 productId) public view returns (uint256, bool) { return (prices[productId], false); } function setPrices(uint256[] memory productIds, uint256[] memory _prices) external onlyKeeper { require(productIds.length == _prices.length, "Oracle: lengths doesn't match"); for (uint256 i = 0; i < productIds.length; ++i) { uint256 productId = productIds[i]; prices[productId] = _prices[i]; lastUpdatedTimes[productId] = block.timestamp; emit SetPrice(productId, _prices[i], block.timestamp); } } function setMaxPriceDiff(uint256 productId, uint256 _maxPriceDiff) external onlyGov { require(_maxPriceDiff <= 5e16, "Oracle: maxPriceDiff cannot be larger than 5%"); maxPriceDiffs[productId] = _maxPriceDiff; emit SetMaxPriceDiff(productId, _maxPriceDiff); } function setSpread(uint256 productId, uint256 _spread) external onlyGov { require(_spread <= 500, "Oracle: spread cannot be larger than 5%"); spreads[productId] = _spread; emit SetSpread(productId, _spread); } function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyGov { isSpreadEnabled = _isSpreadEnabled; emit SetIsSpreadEnabled(_isSpreadEnabled); } function setKeeper(address _keeper, bool _isActive) external onlyGov { keepers[_keeper] = _isActive; emit SetKeeper(_keeper, _isActive); } }
/contracts/access/Governable.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Governable { address public gov; event SetGov(address indexed newGov); constructor() { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; emit SetGov(_gov); } }
Contract ABI
[{"type":"event","name":"SetGov","inputs":[{"type":"address","name":"newGov","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SetIsSpreadEnabled","inputs":[{"type":"bool","name":"isSpreadEnabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SetKeeper","inputs":[{"type":"address","name":"keeper","internalType":"address","indexed":false},{"type":"bool","name":"isActive","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SetMaxPriceDiff","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"maxPriceDiff","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SetPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"price","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SetSpread","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"spread","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"PRICE_BASE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"bool","name":"isLong","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"bool","name":"","internalType":"bool"}],"name":"getPriceAndSource","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"_prices","internalType":"uint256[]"}],"name":"getPrices","inputs":[{"type":"uint256[]","name":"productIds","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gov","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isSpreadEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"keepers","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastUpdatedTimes","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxPriceDiffs","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"prices","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGov","inputs":[{"type":"address","name":"_gov","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsSpreadEnabled","inputs":[{"type":"bool","name":"_isSpreadEnabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setKeeper","inputs":[{"type":"address","name":"_keeper","internalType":"address"},{"type":"bool","name":"_isActive","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxPriceDiff","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"uint256","name":"_maxPriceDiff","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPrices","inputs":[{"type":"uint256[]","name":"productIds","internalType":"uint256[]"},{"type":"uint256[]","name":"_prices","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSpread","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"uint256","name":"_spread","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"spreads","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610e0e806100326000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636c0ae9b5116100b2578063ce98dfa811610081578063d05eaae011610066578063d05eaae014610303578063d1b9e85314610316578063e75722301461032957600080fd5b8063ce98dfa8146102dd578063cfad57a2146102f057600080fd5b80636c0ae9b5146102755780637f407edf1461028a578063800c5e481461029d578063bc31c1c1146102bd57600080fd5b80633bbd64bc1161010957806347a153a3116100ee57806347a153a31461022e5780635705b61a1461024e578063695d41841461026157600080fd5b80633bbd64bc146101c657806345b8fa05146101f957600080fd5b806309cb3a4e1461013b57806312d43a51146101645780631ddd1bf61461018f57806336555e72146101a6575b600080fd5b61014e610149366004610b4d565b610349565b60405161015b9190610b8a565b60405180910390f35b600054610177906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61019861271081565b60405190815260200161015b565b6101986101b4366004610bce565b60046020526000908152604090205481565b6101e96101d4366004610c03565b60056020526000908152604090205460ff1681565b604051901515815260200161015b565b610219610207366004610bce565b60009081526001602052604081205491565b6040805192835290151560208301520161015b565b61019861023c366004610bce565b60026020526000908152604090205481565b61019861025c366004610c35565b6103ff565b6000546101e990600160a01b900460ff1681565b610288610283366004610c61565b6104b8565b005b610288610298366004610c61565b6105dc565b6101986102ab366004610bce565b60036020526000908152604090205481565b6101986102cb366004610bce565b60016020526000908152604090205481565b6102886102eb366004610c83565b6106ee565b6102886102fe366004610c03565b6107b3565b610288610311366004610c9e565b610865565b610288610324366004610d02565b6109ee565b610198610337366004610bce565b60009081526001602052604090205490565b6060815167ffffffffffffffff81111561036557610365610a9c565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b50905060005b82518110156103f9576103cc8382815181106103b2576103b2610d2c565b602002602001015160009081526001602052604090205490565b8282815181106103de576103de610d2c565b60209081029190910101526103f281610d58565b9050610394565b50919050565b600080600061041a8560009081526001602052604081205491565b6000549193509150600160a01b900460ff16806104345750805b156104ae5783610474576000858152600460205260409020546127109061045b9082610d71565b6104659084610d84565b61046f9190610da3565b6104a5565b600085815260046020526040902054612710906104919082610dc5565b61049b9084610d84565b6104a59190610da3565b925050506104b2565b5090505b92915050565b6000546001600160a01b0316331461050f5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064015b60405180910390fd5b66b1a2bc2ec5000081111561058c5760405162461bcd60e51b815260206004820152602d60248201527f4f7261636c653a206d61785072696365446966662063616e6e6f74206265206c60448201527f6172676572207468616e203525000000000000000000000000000000000000006064820152608401610506565b60008281526003602090815260409182902083905581518481529081018390527fa2bfaeac9d464808726006272464bcd5d90b5922466632757f85f58fdb538a4e91015b60405180910390a15050565b6000546001600160a01b0316331461062e5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6101f48111156106a65760405162461bcd60e51b815260206004820152602760248201527f4f7261636c653a207370726561642063616e6e6f74206265206c61726765722060448201527f7468616e203525000000000000000000000000000000000000000000000000006064820152608401610506565b60008281526004602090815260409182902083905581518481529081018390527ff09238c8e8b870a1ac7b920c3ad3e033ccc75fde2797283a9e0025da6c648f7d91016105d0565b6000546001600160a01b031633146107405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b60008054821515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f9f87edd10ae0439b2c06b316a18efaecad03746a22c125bcf12abe4b300265d1906107a890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146108055760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825560405190917f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd5491a250565b3360009081526005602052604090205460ff166108c45760405162461bcd60e51b815260206004820152600f60248201527f4f7261636c653a20216b656570657200000000000000000000000000000000006044820152606401610506565b80518251146109155760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c653a206c656e6774687320646f65736e2774206d617463680000006044820152606401610506565b60005b82518110156109e957600083828151811061093557610935610d2c565b6020026020010151905082828151811061095157610951610d2c565b6020908102919091018101516000838152600183526040808220929092556002909252902042905582517f18e75bb8c091a6448c12a2023f055b2714c151b941a91df8b9938788769ffe139082908590859081106109b1576109b1610d2c565b6020908102919091018101516040805193845291830152429082015260600160405180910390a1506109e281610d58565b9050610918565b505050565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8c2ff6748f99f65f4ebf8a1e973a289bad216c4d5b20fda1940d9e01118ae42a91016105d0565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ac357600080fd5b8135602067ffffffffffffffff80831115610ae057610ae0610a9c565b8260051b604051601f19603f83011681018181108482111715610b0557610b05610a9c565b604052938452858101830193838101925087851115610b2357600080fd5b83870191505b84821015610b4257813583529183019190830190610b29565b979650505050505050565b600060208284031215610b5f57600080fd5b813567ffffffffffffffff811115610b7657600080fd5b610b8284828501610ab2565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bc257835183529284019291840191600101610ba6565b50909695505050505050565b600060208284031215610be057600080fd5b5035919050565b80356001600160a01b0381168114610bfe57600080fd5b919050565b600060208284031215610c1557600080fd5b610c1e82610be7565b9392505050565b80358015158114610bfe57600080fd5b60008060408385031215610c4857600080fd5b82359150610c5860208401610c25565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b600060208284031215610c9557600080fd5b610c1e82610c25565b60008060408385031215610cb157600080fd5b823567ffffffffffffffff80821115610cc957600080fd5b610cd586838701610ab2565b93506020850135915080821115610ceb57600080fd5b50610cf885828601610ab2565b9150509250929050565b60008060408385031215610d1557600080fd5b610d1e83610be7565b9150610c5860208401610c25565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610d6a57610d6a610d42565b5060010190565b818103818111156104b2576104b2610d42565b6000816000190483118215151615610d9e57610d9e610d42565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156104b2576104b2610d4256fea2646970667358221220d8c071632926d76dc886415e8f1cb67ffd742c77c7711462d61d0fb9e293eee364736f6c63430008100033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c80636c0ae9b5116100b2578063ce98dfa811610081578063d05eaae011610066578063d05eaae014610303578063d1b9e85314610316578063e75722301461032957600080fd5b8063ce98dfa8146102dd578063cfad57a2146102f057600080fd5b80636c0ae9b5146102755780637f407edf1461028a578063800c5e481461029d578063bc31c1c1146102bd57600080fd5b80633bbd64bc1161010957806347a153a3116100ee57806347a153a31461022e5780635705b61a1461024e578063695d41841461026157600080fd5b80633bbd64bc146101c657806345b8fa05146101f957600080fd5b806309cb3a4e1461013b57806312d43a51146101645780631ddd1bf61461018f57806336555e72146101a6575b600080fd5b61014e610149366004610b4d565b610349565b60405161015b9190610b8a565b60405180910390f35b600054610177906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61019861271081565b60405190815260200161015b565b6101986101b4366004610bce565b60046020526000908152604090205481565b6101e96101d4366004610c03565b60056020526000908152604090205460ff1681565b604051901515815260200161015b565b610219610207366004610bce565b60009081526001602052604081205491565b6040805192835290151560208301520161015b565b61019861023c366004610bce565b60026020526000908152604090205481565b61019861025c366004610c35565b6103ff565b6000546101e990600160a01b900460ff1681565b610288610283366004610c61565b6104b8565b005b610288610298366004610c61565b6105dc565b6101986102ab366004610bce565b60036020526000908152604090205481565b6101986102cb366004610bce565b60016020526000908152604090205481565b6102886102eb366004610c83565b6106ee565b6102886102fe366004610c03565b6107b3565b610288610311366004610c9e565b610865565b610288610324366004610d02565b6109ee565b610198610337366004610bce565b60009081526001602052604090205490565b6060815167ffffffffffffffff81111561036557610365610a9c565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b50905060005b82518110156103f9576103cc8382815181106103b2576103b2610d2c565b602002602001015160009081526001602052604090205490565b8282815181106103de576103de610d2c565b60209081029190910101526103f281610d58565b9050610394565b50919050565b600080600061041a8560009081526001602052604081205491565b6000549193509150600160a01b900460ff16806104345750805b156104ae5783610474576000858152600460205260409020546127109061045b9082610d71565b6104659084610d84565b61046f9190610da3565b6104a5565b600085815260046020526040902054612710906104919082610dc5565b61049b9084610d84565b6104a59190610da3565b925050506104b2565b5090505b92915050565b6000546001600160a01b0316331461050f5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064015b60405180910390fd5b66b1a2bc2ec5000081111561058c5760405162461bcd60e51b815260206004820152602d60248201527f4f7261636c653a206d61785072696365446966662063616e6e6f74206265206c60448201527f6172676572207468616e203525000000000000000000000000000000000000006064820152608401610506565b60008281526003602090815260409182902083905581518481529081018390527fa2bfaeac9d464808726006272464bcd5d90b5922466632757f85f58fdb538a4e91015b60405180910390a15050565b6000546001600160a01b0316331461062e5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6101f48111156106a65760405162461bcd60e51b815260206004820152602760248201527f4f7261636c653a207370726561642063616e6e6f74206265206c61726765722060448201527f7468616e203525000000000000000000000000000000000000000000000000006064820152608401610506565b60008281526004602090815260409182902083905581518481529081018390527ff09238c8e8b870a1ac7b920c3ad3e033ccc75fde2797283a9e0025da6c648f7d91016105d0565b6000546001600160a01b031633146107405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b60008054821515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f9f87edd10ae0439b2c06b316a18efaecad03746a22c125bcf12abe4b300265d1906107a890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146108055760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825560405190917f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd5491a250565b3360009081526005602052604090205460ff166108c45760405162461bcd60e51b815260206004820152600f60248201527f4f7261636c653a20216b656570657200000000000000000000000000000000006044820152606401610506565b80518251146109155760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c653a206c656e6774687320646f65736e2774206d617463680000006044820152606401610506565b60005b82518110156109e957600083828151811061093557610935610d2c565b6020026020010151905082828151811061095157610951610d2c565b6020908102919091018101516000838152600183526040808220929092556002909252902042905582517f18e75bb8c091a6448c12a2023f055b2714c151b941a91df8b9938788769ffe139082908590859081106109b1576109b1610d2c565b6020908102919091018101516040805193845291830152429082015260600160405180910390a1506109e281610d58565b9050610918565b505050565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8c2ff6748f99f65f4ebf8a1e973a289bad216c4d5b20fda1940d9e01118ae42a91016105d0565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ac357600080fd5b8135602067ffffffffffffffff80831115610ae057610ae0610a9c565b8260051b604051601f19603f83011681018181108482111715610b0557610b05610a9c565b604052938452858101830193838101925087851115610b2357600080fd5b83870191505b84821015610b4257813583529183019190830190610b29565b979650505050505050565b600060208284031215610b5f57600080fd5b813567ffffffffffffffff811115610b7657600080fd5b610b8284828501610ab2565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bc257835183529284019291840191600101610ba6565b50909695505050505050565b600060208284031215610be057600080fd5b5035919050565b80356001600160a01b0381168114610bfe57600080fd5b919050565b600060208284031215610c1557600080fd5b610c1e82610be7565b9392505050565b80358015158114610bfe57600080fd5b60008060408385031215610c4857600080fd5b82359150610c5860208401610c25565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b600060208284031215610c9557600080fd5b610c1e82610c25565b60008060408385031215610cb157600080fd5b823567ffffffffffffffff80821115610cc957600080fd5b610cd586838701610ab2565b93506020850135915080821115610ceb57600080fd5b50610cf885828601610ab2565b9150509250929050565b60008060408385031215610d1557600080fd5b610d1e83610be7565b9150610c5860208401610c25565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610d6a57610d6a610d42565b5060010190565b818103818111156104b2576104b2610d42565b6000816000190483118215151615610d9e57610d9e610d42565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156104b2576104b2610d4256fea2646970667358221220d8c071632926d76dc886415e8f1cb67ffd742c77c7711462d61d0fb9e293eee364736f6c63430008100033