#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <ctime>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <math.h>
#include <queue>
#include <memory.h>
#include <iostream>
#include <fstream>
#include <stack>
#include <complex>
#include <list>
using namespace std;
void ASS(bool bb)
{
if (!bb)
{
++*(int*)0;
}
}
#define FOR(i, x) for (int i = 0; i < (int)(x); ++i)
#define CL(x) memset(x, 0, sizeof(x))
#define CLX(x, y) memset(x, y, sizeof(x))
#pragma comment(linker, "/STACK:106777216")
typedef vector<int> vi;
typedef long long LL;
const int K = 200;
const int QK = 400;
struct M {
int x;
int* p;
};
vector<M> mem;
LL TotalSum;
struct Revertable {
Revertable()
: x(0)
{
}
int Get() const {
return x;
}
void Set(int xx) {
M m;
m.x = x;
m.p = &x;
mem.push_back(m);
x = xx;
}
void UnRevertableSet(int xx) {
x = xx;
}
private:
int x;
};
struct TBackup {
size_t pos;
LL sum;
void Init() {
pos = mem.size();
sum = TotalSum;
}
void BackUp() {
while (mem.size() > pos) {
*mem.back().p = mem.back().x;
mem.pop_back();
}
TotalSum = sum;
}
};
vector<Revertable> ar;
vector<Revertable> cnt;
vi values;
struct Q {
int update, x, y, id;
};
void Add(int x) {
if (cnt[x].Get() == 0)
TotalSum += values[x];
cnt[x].Set(cnt[x].Get() + 1);
}
void Del(int x) {
if (cnt[x].Get() == 1)
TotalSum -= values[x];
cnt[x].Set(cnt[x].Get() - 1);
}
vector<LL> Solve(vi a, vector<Q> q) {
const int n = (int)a.size();
const int qn = (int)q.size();
values = a;
FOR(i, qn) {
q[i].id = i;
if (q[i].update)
values.push_back(q[i].y);
}
sort(values.begin(), values.end());
values.resize(unique(values.begin(), values.end()) - values.begin());
FOR(i, n)
a[i] = (int)(lower_bound(values.begin(), values.end(), a[i]) - values.begin());
FOR(i, qn)
if (q[i].update)
q[i].y = (int)(lower_bound(values.begin(), values.end(), q[i].y) - values.begin());
ar.resize(n);
FOR(i, n)
ar[i].UnRevertableSet(a[i]);
cnt.resize(values.size());
vector<LL> ans(qn);
const int c = n / K + (n % K != 0);
for (int qL = 0; qL < qn; qL += QK) {
int qR = min(qL + QK, qn);
vector< vector< vector<Q> > > qq(c + 2, vector< vector<Q> >(c + 2));
vector<Q> qu;
qu.reserve(QK);
for (int i = qL; i < qR; ++i)
if (q[i].update)
qu.push_back(q[i]);
else
qq[q[i].x / K + 1][q[i].y / K].push_back(q[i]);
for (int L = 1, Lk = K; L <= c; ++L, Lk += K) {
TBackup bL;
bL.Init();
for (int R = L - 1, Rk = Lk - K; R <= c; ++R, Rk += K) {
TBackup bR;
bR.Init();
size_t qpos = 0;
const vector<Q>& z = qq[L][R];
FOR(i, z.size()) {
const Q& curQ = z[i];
while (qpos < qu.size() && qu[qpos].id < curQ.id) {
const Q& u = qu[qpos];
if (Lk <= u.x && u.x < Rk)
Del(ar[u.x].Get());
ar[u.x].Set(u.y);
if (Lk <= u.x && u.x < Rk)
Add(ar[u.x].Get());
++qpos;
}
TBackup bQuery;
bQuery.Init();
if (R == L - 1) {
for (int j = curQ.x; j < curQ.y; ++j) {
Add(ar[j].Get());
}
} else {
for (int j = curQ.x; j < Lk; ++j)
Add(ar[j].Get());
for (int j = Rk; j < curQ.y; ++j)
Add(ar[j].Get());
}
ans[curQ.id] = TotalSum;
bQuery.BackUp();
}
bR.BackUp();
if (R >= L) {
int Rnext = min(n, Rk + K);
for (int i = Rk; i < Rnext; ++i)
Add(ar[i].Get());
}
}
bL.BackUp();
}
for (int i = qL; i < qR; ++i)
if (q[i].update)
ar[q[i].x].UnRevertableSet(q[i].y);
}
return ans;
}
vector<LL> SolveV(vi a, vector<Q> q) {
vector<LL> ans(q.size(), 0);
FOR(i, q.size()) {
if (q[i].update)
a[q[i].x] = q[i].y;
else {
map<int, int> m;
for (int j = q[i].x; j < q[i].y; ++j) {
int &t = m[a[j]];
if (!t) {
t = 1;
ans[i] += a[j];
}
}
}
}
return ans;
}
int read() {
int x;
scanf("%d", &x);
return x;
}
void InputAndSolve() {
int n = read();
vi a(n);
FOR(i, n)
a[i] = read();
int qn = read();
vector<Q> q(qn);
FOR(i, qn) {
static char s[16];
scanf("%s%d%d", s, &q[i].x, &q[i].y);
q[i].x--;
q[i].id = i;
q[i].update = s[0] == 'U';
}
vector<LL> ans = SolveV(a, q);
FOR(i, qn)
if (!q[i].update) {
// cout << ans[i] << "\n";
printf("%lld\n", ans[i]);
}
}
int main()
{
InputAndSolve();
/*
FOR(qqq, 1000) {
int n = rand() % 10 + 10;
vi a(n);
FOR(i, n)
a[i] = rand() % (n / 2);
int qn = n * 2;
vector<Q> q(qn);
FOR(i, qn) {
q[i].id = i;
if (rand() & 1) {
q[i].update = 1;
q[i].x = rand() % n;
q[i].y = rand() % (n / 2);
} else {
q[i].update = 0;
q[i].x = rand() % n;
q[i].y = rand() % n;
if (q[i].x > q[i].y)
swap(q[i].x, q[i].y);
q[i].y++;
}
}
vector<LL> v0 = Solve(a, q);
vector<LL> v1 = SolveV(a, q);
if (v0 != v1) {
cout << "gg" << endl;
}
}
*/
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPG1lbW9yeS5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxjb21wbGV4PgojaW5jbHVkZSA8bGlzdD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIEFTUyhib29sIGJiKQp7CiAgICBpZiAoIWJiKQogICAgewogICAgICAgICsrKihpbnQqKTA7CiAgICB9Cn0KCiNkZWZpbmUgRk9SKGksIHgpIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkoeCk7ICsraSkKI2RlZmluZSBDTCh4KSBtZW1zZXQoeCwgMCwgc2l6ZW9mKHgpKQojZGVmaW5lIENMWCh4LCB5KSBtZW1zZXQoeCwgeSwgc2l6ZW9mKHgpKQoKI3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9TVEFDSzoxMDY3NzcyMTYiKSAKCnR5cGVkZWYgdmVjdG9yPGludD4gdmk7Cgp0eXBlZGVmIGxvbmcgbG9uZyBMTDsKCmNvbnN0IGludCBLID0gMjAwOwpjb25zdCBpbnQgUUsgPSA0MDA7CgpzdHJ1Y3QgTSB7CiAgICBpbnQgeDsKICAgIGludCogcDsKfTsKCnZlY3RvcjxNPiBtZW07CkxMIFRvdGFsU3VtOwoKc3RydWN0IFJldmVydGFibGUgewogICAgUmV2ZXJ0YWJsZSgpCiAgICAgICAgOiB4KDApCiAgICB7CiAgICB9CiAgICBpbnQgR2V0KCkgY29uc3QgewogICAgICAgIHJldHVybiB4OwogICAgfQogICAgdm9pZCBTZXQoaW50IHh4KSB7CiAgICAgICAgTSBtOwogICAgICAgIG0ueCA9IHg7CiAgICAgICAgbS5wID0gJng7CiAgICAgICAgbWVtLnB1c2hfYmFjayhtKTsKICAgICAgICB4ID0geHg7CiAgICB9CiAgICB2b2lkIFVuUmV2ZXJ0YWJsZVNldChpbnQgeHgpIHsKICAgICAgICB4ID0geHg7CiAgICB9CnByaXZhdGU6CiAgICBpbnQgeDsKfTsKCnN0cnVjdCBUQmFja3VwIHsKICAgIHNpemVfdCBwb3M7CiAgICBMTCBzdW07CiAgICB2b2lkIEluaXQoKSB7CiAgICAgICAgcG9zID0gbWVtLnNpemUoKTsKICAgICAgICBzdW0gPSBUb3RhbFN1bTsKICAgIH0KICAgIHZvaWQgQmFja1VwKCkgewogICAgICAgIHdoaWxlIChtZW0uc2l6ZSgpID4gcG9zKSB7CiAgICAgICAgICAgICptZW0uYmFjaygpLnAgPSBtZW0uYmFjaygpLng7CiAgICAgICAgICAgIG1lbS5wb3BfYmFjaygpOwogICAgICAgIH0KICAgICAgICBUb3RhbFN1bSA9IHN1bTsKICAgIH0KfTsKCnZlY3RvcjxSZXZlcnRhYmxlPiBhcjsKdmVjdG9yPFJldmVydGFibGU+IGNudDsKCnZpIHZhbHVlczsKCnN0cnVjdCBRIHsKICAgIGludCB1cGRhdGUsIHgsIHksIGlkOwp9OwoKdm9pZCBBZGQoaW50IHgpIHsKICAgIGlmIChjbnRbeF0uR2V0KCkgPT0gMCkKICAgICAgICBUb3RhbFN1bSArPSB2YWx1ZXNbeF07CiAgICBjbnRbeF0uU2V0KGNudFt4XS5HZXQoKSArIDEpOwp9Cgp2b2lkIERlbChpbnQgeCkgewogICAgaWYgKGNudFt4XS5HZXQoKSA9PSAxKQogICAgICAgIFRvdGFsU3VtIC09IHZhbHVlc1t4XTsKICAgIGNudFt4XS5TZXQoY250W3hdLkdldCgpIC0gMSk7Cn0KCnZlY3RvcjxMTD4gU29sdmUodmkgYSwgdmVjdG9yPFE+IHEpIHsKICAgIGNvbnN0IGludCBuID0gKGludClhLnNpemUoKTsKICAgIGNvbnN0IGludCBxbiA9IChpbnQpcS5zaXplKCk7CgogICAgdmFsdWVzID0gYTsKICAgIEZPUihpLCBxbikgewogICAgICAgIHFbaV0uaWQgPSBpOwogICAgICAgIGlmIChxW2ldLnVwZGF0ZSkKICAgICAgICAgICAgdmFsdWVzLnB1c2hfYmFjayhxW2ldLnkpOwogICAgfQoKICAgIHNvcnQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSk7CiAgICB2YWx1ZXMucmVzaXplKHVuaXF1ZSh2YWx1ZXMuYmVnaW4oKSwgdmFsdWVzLmVuZCgpKSAtIHZhbHVlcy5iZWdpbigpKTsKCiAgICBGT1IoaSwgbikKICAgICAgICBhW2ldID0gKGludCkobG93ZXJfYm91bmQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgYVtpXSkgLSB2YWx1ZXMuYmVnaW4oKSk7CgogICAgRk9SKGksIHFuKQogICAgICAgIGlmIChxW2ldLnVwZGF0ZSkKICAgICAgICAgICAgcVtpXS55ID0gKGludCkobG93ZXJfYm91bmQodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSwgcVtpXS55KSAtIHZhbHVlcy5iZWdpbigpKTsKCiAgICBhci5yZXNpemUobik7CiAgICBGT1IoaSwgbikKICAgICAgICBhcltpXS5VblJldmVydGFibGVTZXQoYVtpXSk7CiAgICBjbnQucmVzaXplKHZhbHVlcy5zaXplKCkpOwoKICAgIHZlY3RvcjxMTD4gYW5zKHFuKTsKICAgIGNvbnN0IGludCBjID0gbiAvIEsgKyAobiAlIEsgIT0gMCk7CiAgICBmb3IgKGludCBxTCA9IDA7IHFMIDwgcW47IHFMICs9IFFLKSB7CiAgICAgICAgaW50IHFSID0gbWluKHFMICsgUUssIHFuKTsKICAgICAgICB2ZWN0b3I8IHZlY3RvcjwgdmVjdG9yPFE+ID4gPiBxcShjICsgMiwgdmVjdG9yPCB2ZWN0b3I8UT4gPihjICsgMikpOwogICAgICAgIHZlY3RvcjxRPiBxdTsKICAgICAgICBxdS5yZXNlcnZlKFFLKTsKICAgICAgICBmb3IgKGludCBpID0gcUw7IGkgPCBxUjsgKytpKQogICAgICAgICAgICBpZiAocVtpXS51cGRhdGUpCiAgICAgICAgICAgICAgICBxdS5wdXNoX2JhY2socVtpXSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHFxW3FbaV0ueCAvIEsgKyAxXVtxW2ldLnkgLyBLXS5wdXNoX2JhY2socVtpXSk7CgogICAgICAgIGZvciAoaW50IEwgPSAxLCBMayA9IEs7IEwgPD0gYzsgKytMLCBMayArPSBLKSB7CiAgICAgICAgICAgIFRCYWNrdXAgYkw7CiAgICAgICAgICAgIGJMLkluaXQoKTsKICAgICAgICAgICAgZm9yIChpbnQgUiA9IEwgLSAxLCBSayA9IExrIC0gSzsgUiA8PSBjOyArK1IsIFJrICs9IEspIHsKICAgICAgICAgICAgICAgIFRCYWNrdXAgYlI7CiAgICAgICAgICAgICAgICBiUi5Jbml0KCk7CiAgICAgICAgICAgICAgICBzaXplX3QgcXBvcyA9IDA7CiAgICAgICAgICAgICAgICBjb25zdCB2ZWN0b3I8UT4mIHogPSBxcVtMXVtSXTsKICAgICAgICAgICAgICAgIEZPUihpLCB6LnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IFEmIGN1clEgPSB6W2ldOwogICAgICAgICAgICAgICAgICAgIHdoaWxlIChxcG9zIDwgcXUuc2l6ZSgpICYmIHF1W3Fwb3NdLmlkIDwgY3VyUS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRJiB1ID0gcXVbcXBvc107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMayA8PSB1LnggJiYgdS54IDwgUmspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWwoYXJbdS54XS5HZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyW3UueF0uU2V0KHUueSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMayA8PSB1LnggJiYgdS54IDwgUmspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQoYXJbdS54XS5HZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICsrcXBvczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgVEJhY2t1cCBiUXVlcnk7CiAgICAgICAgICAgICAgICAgICAgYlF1ZXJ5LkluaXQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoUiA9PSBMIC0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gY3VyUS54OyBqIDwgY3VyUS55OyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZChhcltqXS5HZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gY3VyUS54OyBqIDwgTGs7ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZChhcltqXS5HZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBSazsgaiA8IGN1clEueTsgKytqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkKGFyW2pdLkdldCgpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYW5zW2N1clEuaWRdID0gVG90YWxTdW07CiAgICAgICAgICAgICAgICAgICAgYlF1ZXJ5LkJhY2tVcCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYlIuQmFja1VwKCk7CiAgICAgICAgICAgICAgICBpZiAoUiA+PSBMKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IFJuZXh0ID0gbWluKG4sIFJrICsgSyk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IFJrOyBpIDwgUm5leHQ7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgQWRkKGFyW2ldLkdldCgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBiTC5CYWNrVXAoKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IHFMOyBpIDwgcVI7ICsraSkKICAgICAgICAgICAgaWYgKHFbaV0udXBkYXRlKQogICAgICAgICAgICAgICAgYXJbcVtpXS54XS5VblJldmVydGFibGVTZXQocVtpXS55KTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCnZlY3RvcjxMTD4gU29sdmVWKHZpIGEsIHZlY3RvcjxRPiBxKSB7CiAgICB2ZWN0b3I8TEw+IGFucyhxLnNpemUoKSwgMCk7CiAgICBGT1IoaSwgcS5zaXplKCkpIHsKICAgICAgICBpZiAocVtpXS51cGRhdGUpCiAgICAgICAgICAgIGFbcVtpXS54XSA9IHFbaV0ueTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbWFwPGludCwgaW50PiBtOwogICAgICAgICAgICBmb3IgKGludCBqID0gcVtpXS54OyBqIDwgcVtpXS55OyArK2opIHsKICAgICAgICAgICAgICAgIGludCAmdCA9IG1bYVtqXV07CiAgICAgICAgICAgICAgICBpZiAoIXQpIHsKICAgICAgICAgICAgICAgICAgICB0ID0gMTsKICAgICAgICAgICAgICAgICAgICBhbnNbaV0gKz0gYVtqXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCByZWFkKCkgewogICAgaW50IHg7CiAgICBzY2FuZigiJWQiLCAmeCk7CiAgICByZXR1cm4geDsKfQoKdm9pZCBJbnB1dEFuZFNvbHZlKCkgewogICAgaW50IG4gPSByZWFkKCk7CiAgICB2aSBhKG4pOwogICAgRk9SKGksIG4pCiAgICAgICAgYVtpXSA9IHJlYWQoKTsKCiAgICBpbnQgcW4gPSByZWFkKCk7CiAgICB2ZWN0b3I8UT4gcShxbik7CgogICAgRk9SKGksIHFuKSB7CiAgICAgICAgc3RhdGljIGNoYXIgc1sxNl07CiAgICAgICAgc2NhbmYoIiVzJWQlZCIsIHMsICZxW2ldLngsICZxW2ldLnkpOwogICAgICAgIHFbaV0ueC0tOwogICAgICAgIHFbaV0uaWQgPSBpOwogICAgICAgIHFbaV0udXBkYXRlID0gc1swXSA9PSAnVSc7CiAgICB9CgogICAgdmVjdG9yPExMPiBhbnMgPSBTb2x2ZVYoYSwgcSk7CiAgICBGT1IoaSwgcW4pCiAgICAgICAgaWYgKCFxW2ldLnVwZGF0ZSkgewovLyAgICAgICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8ICJcbiI7CiAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIiwgYW5zW2ldKTsKICAgICAgICB9Cn0KCmludCBtYWluKCkKewogICAgSW5wdXRBbmRTb2x2ZSgpOwoKICAgIC8qCiAgICBGT1IocXFxLCAxMDAwKSB7CiAgICAgICAgaW50IG4gPSByYW5kKCkgJSAxMCArIDEwOwogICAgICAgIHZpIGEobik7CiAgICAgICAgRk9SKGksIG4pCiAgICAgICAgICAgIGFbaV0gPSByYW5kKCkgJSAobiAvIDIpOwogICAgICAgIGludCBxbiA9IG4gKiAyOwogICAgICAgIHZlY3RvcjxRPiBxKHFuKTsKICAgICAgICBGT1IoaSwgcW4pIHsKICAgICAgICAgICAgcVtpXS5pZCA9IGk7CiAgICAgICAgICAgIGlmIChyYW5kKCkgJiAxKSB7CiAgICAgICAgICAgICAgICBxW2ldLnVwZGF0ZSA9IDE7CiAgICAgICAgICAgICAgICBxW2ldLnggPSByYW5kKCkgJSBuOwogICAgICAgICAgICAgICAgcVtpXS55ID0gcmFuZCgpICUgKG4gLyAyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHFbaV0udXBkYXRlID0gMDsKICAgICAgICAgICAgICAgIHFbaV0ueCA9IHJhbmQoKSAlIG47CiAgICAgICAgICAgICAgICBxW2ldLnkgPSByYW5kKCkgJSBuOwogICAgICAgICAgICAgICAgaWYgKHFbaV0ueCA+IHFbaV0ueSkKICAgICAgICAgICAgICAgICAgICBzd2FwKHFbaV0ueCwgcVtpXS55KTsKICAgICAgICAgICAgICAgIHFbaV0ueSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZlY3RvcjxMTD4gdjAgPSBTb2x2ZShhLCBxKTsKICAgICAgICB2ZWN0b3I8TEw+IHYxID0gU29sdmVWKGEsIHEpOwogICAgICAgIGlmICh2MCAhPSB2MSkgewogICAgICAgICAgICBjb3V0IDw8ICJnZyIgPDwgZW5kbDsKICAgICAgICB9CiAgICB9CiAgICAqLwoKICAgIHJldHVybiAwOwp9Cg==