    text->setSource(QUrl::fromLocalFile("qt/offroad/text_view.qml"));
  
    main_layout->addWidget(text);
  
    // TODO: add decline page
    QHBoxLayout* buttons = new QHBoxLayout;
    main_layout->addLayout(buttons);
  
    buttons->addWidget(new QPushButton("Decline"));
 
</s> remove   RequestRepeater *repeater = new RequestRepeater(this, url, "ApiCache_DriveStats", 13);
 </s> add   RequestRepeater *repeater = new RequestRepeater(this, url, "ApiCache_DriveStats", 30); </s> remove   QVBoxLayout* vlayout = new QVBoxLayout(this);
  vlayout->addLayout(gl);

  // TODO: do we really need to update this frequently?
 </s> add  </s> remove   text->rootContext()->setContextProperty("font_size", 55);

 </s> add  </s> remove TermsPage::TermsPage(QWidget *parent) : QFrame(parent){
 </s> add void TermsPage::showEvent(QShowEvent *event) {
  // late init, building QML widget takes 200ms
  if (layout()) {
    return;
  }

  QObject *obj = (QObject*)text->rootObject();
  QObject::connect(obj, SIGNAL(qmlSignal()), SLOT(enableAccept()));

    text->setSource(QUrl::fromLocalFile("qt/offroad/text_view.qml"));
  
    main_layout->addWidget(text);
  
  QObject *obj = (QObject*)text->rootObject();
  QObject::connect(obj, SIGNAL(qmlSignal()), SLOT(enableAccept()));

    // TODO: add decline page
    QHBoxLayout* buttons = new QHBoxLayout;
    main_layout->addLayout(buttons);
  
    buttons->addWidget(new QPushButton("Decline"));
keep keep keep add keep keep keep keep keep
 UI: fast startup (#20781)

* faster startup

* faster

* cleanup

Co-authored-by: Comma Device <device@comma.ai> 
selfdrive/ui/qt/offroad/onboarding.cc